Глобальные клавиши.

Тема в разделе "WASM.WIN32", создана пользователем DarkWanderer, 13 сен 2006.

  1. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    Собираю программу управления уровнем громкости. Для глобальных клавиш создаю thread, код которого ниже. Все работает, но приходится каждый раз заново нажимать ctrl. Сделал как написано в справочнике, поправте если понял не так.
    Код (Text):
    1. ;~~~~~~~~~~~~~~~~~~~~~~
    2. Perception_Key  proc  hWnd :dword
    3. ; фоновая функция
    4.  
    5. PK_01:
    6. .if  (Thread_flag)
    7.     ; проверяем клавиатуру
    8.     invoke  GetAsyncKeyState, VK_UP
    9.     dec  eax                ; test  eax, 00000001h
    10.     jnz  no_Ctrl_Up
    11.     invoke  GetAsyncKeyState, VK_CONTROL    ; Ctrl + Up
    12.     shl  eax, 01            ; test  eax, 80000000h
    13.     jnc  no_Ctrl_Up                                                          
    14.         ; передаем оконной процедуре сообщение о нажатой комбинации
    15.         invoke  SendMessage, hWnd, WM_COMMAND, IDK_CTRL_UP, IDK_KEY
    16.     no_Ctrl_Up:
    17.    
    18.     invoke  GetAsyncKeyState, VK_DOWN
    19.     dec  eax                ; test  eax, 00000001h
    20.     jnz  no_Ctrl_Down
    21.     invoke  GetAsyncKeyState, VK_CONTROL    ; Ctrl + Down
    22.     shl  eax, 01h           ; test  eax, 80000000h
    23.     jnc  no_Ctrl_Down                                                          
    24.         invoke  SendMessage, hWnd, WM_COMMAND, IDK_CTRL_DOWN, IDK_KEY
    25.     no_Ctrl_Down:
    26.  
    27.     invoke  Sleep, 200
    28.     jmp  PK_01
    29. .endif
    30.  
    31. ret
    32. Perception_Key  endp
    33.  
    34. ;~~~~~~~~~~~~~~~~~~~~~~
    спасибо.
     
  2. khv_test

    khv_test New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    135
    Вот посмотри как сделал я чтоб управлять винампом на внешних клавишах моего бука.
    Точнее биты которые возвращает GetAsyncKeyState,
    у меня это в макросах KEY_PRESSED,KEY_TOGGLED.
     
  3. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    khv_test Спасибо. Посмтрю. Извините, что потерялся, нет сети.
     
  4. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    Я тоже такое делал :))) Управление - ALT + DOWN и ALT + UP, выход - ALT + PAUSE
     
  5. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    khv_test
    Смотрел. Помогло. Сделаю как у тебя.

    Bohdan200
    Пока как у тебя. Протестировал, работает. Окончательный вариант переделаю.
    Скопирвал с тебя сочетания клавиш, но ALT+PAUSE конфликтует с Punto Switcher. Заменил. Еще красиво сделан индикатор, сделаю такой же;))

    Спасибо, тема закрыта.