1

Тема: AHK: Горячие клавиши

Добрый день, подскажите пожалуйста, каким образом можно определить в каком состоянии находится горячая клавиша, может быть существует специальная переменная?
Спасибо.


LButton::Click
>!,::
Hotkey, LButton, toggle          ;  Включение/Выключение горячей клавиши
                                 ;  Здесь должна быть некая операция присвоения значения 0/1
if %MyHotKey% contains 1          
  {                                                  
   SetScrollLockState, On                
  }                                                   
else                                                
  {                                                   
   SetScrollLockState, Off                 
  }                                                   
Return

2

Re: AHK: Горячие клавиши

Не нашёл такой переменной. Вероятно, автор программы не предусмотрел возможность узнать состояние горячей клавиши.

3

Re: AHK: Горячие клавиши

Не совсем понял, но может подойдет

getkeystate

4

Re: AHK: Горячие клавиши

myhotkey = LButton ; задаём хоткей по умолчанию
hotkeydown = %myhotkey%
Hotkey, %hotkeydown%, HotkeyLabel, On
Return

9:: ; назначаем хоткей на левую мышь
   Hotkey, %hotkeydown%, HotkeyLabel, Off
   myhotkey = LButton
   hotkeydown = %myhotkey%
   Hotkey, %hotkeydown%, HotkeyLabel, On
   Return

0:: ; теперь на правую, и т.д.
   Hotkey, %hotkeydown%, HotkeyLabel, Off
   myhotkey = RButton
   hotkeydown = %myhotkey%
   Hotkey, %hotkeydown%, HotkeyLabel, On
   Return

HotkeyLabel: ; метка самого хоткея
   keypressed := 1 ; присваивание значения переменной, чтобы считать по этому значению хоткей нажатым
   MsgBox,,, нажата клавиша %hotkeydown%, 1 ; отображение состояния нажатия
   KeyWait, % myhotkey
   MsgBox,,, клавиша %hotkeydown% отжата, 1 ; отображение состояния отжатия
   keypressed := 0 ; при этом значениии хоткей будет считаться отжатым
   Return

Enter:: ; проверка 1
   If keypressed = 1
      MsgBox,,, на данный момент клавиша %hotkeydown% нажата, 1
   Else
      MsgBox,,, %hotkeydown% отжата, 1
   Return

Ctrl & Enter:: ; проверка 2
   If myhotkey Contains RButton
      MsgBox,,, ищем RButton`nсовпадение с текущим хоткеем, 1
   Else
      MsgBox,,, ищем RButton - не совпадение`nтак как щас %hotkeydown%, 1
   Return

F4::ExitApp

5

Re: AHK: Горячие клавиши

Горяча клавиша - это такое понятие. А getkeystate определяет состояние реальных клавиш клавиатуры, осей джойстика и т. д.

6 (изменено: ilya20069, 2011-07-02 00:21:01)

Re: AHK: Горячие клавиши

Почти разобрался, только вот не пойму зачем две переменных myhotkey и hotkeydown, если везде после изменения myhotkey сразу идет присвоение hotkeydown?
И


  KeyWait, % myhotkey ; Опечатка? Вроде %myhotkey%.

Ну основную мысль я понял - назначим имя хоткея через переменную и при выключении хоткея менять переменную, чтобы можно было проверить нужный хоткей включен или нет.

7 (изменено: ilya20069, 2011-07-02 01:06:45)

Re: AHK: Горячие клавиши

Спасибо большое, как оказалось, все гениальное - просто!
Если создатели не предусмотрели переменную состояния, значит ее создадим мы.


state = On
Hotkey, LButton, LBLabel, %state%
return
p::
if state contains On
  {
    state = Off
    Hotkey, LButton, LBLabel, Off
  }
else
  {
    state = On
    Hotkey, LButton, LBLabel, On
  }
return
LBLabel:
msgbox я работаю
return

8

Re: AHK: Горячие клавиши

Как-то совсем не вяжется с первым постом. Так бы и написали, что нажимая P, надо включать/отключать Lbutton.
Можно укоротить.

state := 1
Hotkey, Lbutton, LBLabel, % state ? "on" : "off"
p:: Hotkey, LButton, LBLabel, % (state:=!state) ? "on" : "off"
LBLabel:msgbox я работаю

9

Re: AHK: Горячие клавиши

Не просто включать/отключать, но еще возможность проверить в каком она сейчас состоянии, чтобы можно было сделать отображение на экране или как в примере на скроллоке.