Регистрация глобального хоткея

В проге нужно зарегать глобальный хоткей Win Z + Z. Нужен хелп:

  1. Проверить, не занят ли этот хоткей
  2. Как повесить обработчик на него

Советы не нужны. Нужны примеры кода для fasm. Вопросы для M$ Windows, но если будут решения для X11, в частности для xfce4, я буду еще более благодарен!


Ответы (1 шт):

Автор решения: PRODIGY

Горячую клавишу назначает функция RegisterHotKey(), описание здесь: https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerhotkey Вот пример для комбинации Win+Z:

format  pe console
include 'win32ax.inc'
entry   start
;-------------------
.data
HOTKEY_ID  =   1    ; ID комбинации
MOD_WIN    =   8    ;
mesg       MSG      ; назначаем алиас структуре MSG
;-------------------
.code
start:  invoke  RegisterHotKey, 0, HOTKEY_ID, MOD_WIN, 0x5A   ; 5Ah = Z

@wait:  invoke  GetMessage,mesg,0,0,0            ; цикл обработки сообщений
        cmp     [mesg.message],WM_HOTKEY         ; это хоткей?
        jne     @wait                            ; нет: ждать..
       cinvoke  printf,<10,' Hotkey pressed!',0> ; иначе: делаем что нужно

        invoke  UnregisterHotKey,0,HOTKEY_ID   ; удаляем назначенный хоткей
       cinvoke  getch                          ; ждать любую клавишу
       cinvoke  exit,0                         ; на выход
;-------------------
section '.idata' import data readable
  library  msvcrt, 'msvcrt.dll', user32, 'user32.dll'
  import   msvcrt, printf,'printf', exit,'exit', getch,'_getch'
  include 'api\user32.inc'
→ Ссылка