1

Тема: AHK: Проверка нажатой одной из клавиш.

Здравствуйте!

Прошу помощи, мой скрипт по задумке должен проверять зажата ли одна из клавиш (W, A, S или D):


$vk61::                   ;num01
{

GetKeyState, state1, VK57, P ;w
GetKeyState, state2, VK41, P ;a
GetKeyState, state3, VK53, P ;s
GetKeyState, state4, VK44, P ;d

if (state1=D || state2=D || state3=D || state4 = D)
    {
    MsgBox зажата W или A, или S, или D
    }
else
    {
    MsgBox НЕ зажато
    }
}
return

в любом случае не видит, что одна из клавиш  зажата.


Если для одной клавиши - все ок:


$vk61::                   ;num01
{
GetKeyState, state1, VK57, P ;w
if state1=D 
    {
    MsgBox зажата W 
    }
else
    {
    MsgBox НЕ зажато
    }
}
return


Подскажите, как быть с 1м скриптом??

Спасибо

2

Re: AHK: Проверка нажатой одной из клавиш.

Так

If (state1 = "D") OR (state2 = "D") OR (state3 = "D") OR (state4 = "D") 

либо

If (state1 = "D" OR state2 = "D" OR state3 = "D" OR state4 = "D") 
Валентина Гаврикова, Николай Козлов пишет:

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

3 (изменено: Zanoza, 2013-12-23 02:23:03)

Re: AHK: Проверка нажатой одной из клавиш.

Вопрос по теме - можно ли проверить зажатие клавиши (не физически а к примеру скриптом ) .
Таких как контрл ,шифт и альт. (Если зажата  более 10 секунд)  - то отжать ее?
Иногда случаются случаи когда они остаются нажаты в играх или после их выключения.

Win10 x64

4

Re: AHK: Проверка нажатой одной из клавиш.

И можно ли идти по такому принципу:

SetTimer , test , 10
test:
if (GetKeyState AltDown)
    Send , {AltUp}
return
Win10 x64

5 (изменено: Irbis, 2013-12-23 10:40:31)

Re: AHK: Проверка нажатой одной из клавиш.

Во-первых, в таком виде скрипт работать не будет - функция GetKeyState(KeyName [, "P" or "T"]) требует параметров, которых нет в твоем примере.
Во-вторых, в примере процедура таймера запускается каждые 10мс, а не 10 секунд.
В-третьих, сама идея работы выбрана некорректно - запуск таймера не связан с моментом нажатия на клавишу Alt, из-за чего скрипт будет работать неправильно. Например, зажатие Alt может произойти за долю секунды до срабатывания таймера, и он благополучно "отожмет" Alt, хотя 10 секунд не прошло.

Ниже пример скрипта, который каждые 5 секунд сверяет логическое состояние Alt с физическим нажатием на клавишу - если физически клавиша не нажата, но имеет статус "Down", скрипт "отжимает" ее.

#InstallKeybdHook
SetTimer, test, 5000
test:
   if (GetKeyState("Alt") && !GetKeyState("Alt", "P"))
      SendInput, {AltUp}
return