Я тоже не понимаю этого поведения. Очевидно, что F1 UP блокируется программой, как показано в истории ключей (от второй до последней строки ниже, s означает, что она подавлена или заблокирована):
h=Hook Hotkey, s=Suppressed (blocked)
70 03B s d 0.89 F1 temp.ahk
70 03B h u 0.17 F1
0D 01C d 0.31 Enter temp.ahk
0D 01C u 0.17 Enter temp.ahk
70 03B s d 1.36 F1
78 043 h d 0.17 F9
78 043 s u 0.16 F9
70 03B s u 0.45 F1
26 148 d 0.95 Up
Вы можете добавить « F1 & F9 UP::
но», которое поймает условие «ИЛИ» при отпускании F1 или F9, поэтому при 4-х тактном нажатии (F1 вниз, F9 вниз, F9 вверх, F1 вверх) будет срабатывать F9 Up, а не F1 Up.
Одним из возможных решений было бы создание собственной процедуры для определения состояния ключей и последующего независимого вызова вашего кода. Возможно, это связано с первой проблемой, но GetKeyState, похоже, не работает, если вы добавляете фактический F1::
вызов или F1 & F9::
вызов, поэтому попробуйте протестировать этот автономный вариант, чтобы убедиться, что он работает, прежде чем интегрировать его с чем-либо еще.
waitingForF1Up := false
CheckF1Up:
Loop
{
F1 := GetKeyState("F1", "P")
F9 := GetKeyState("F9", "P")
tooltip % F1 ", " F9
if F1 and F9 and not waitingForF1Up
{
SetTimer, F1andF9, -1
waitingForF1up := True
}
else if not F1 and waitingForF1up
{
SetTimer, F1up, -1
waitingForF1up := False
}
sleep 10
}
return
F1up:
tooltip F1 up executed
sleep 1000
tooltip
return
F1andF9:
tooltip F1 and F9 executed
sleep 1000
tooltip
return