Autohotkey - 如果按下新鍵,GetKeyState 會中斷

Autohotkey - 如果按下新鍵,GetKeyState 會中斷

我正在嘗試創建一個按下空格按鈕的腳本,只要物理按下它即可。例如,如果我按住空白鍵,腳本將複製空格Send。一旦我釋放空格鍵,它就會停止發送空格。我已經用這個腳本實現了這一點

#NoEnv
#SingleInstance Force
SendMode Input
loop {
    if (GetKeyState("Space"))
    {
        Send {Space down}
        Random, r, 5, 15
        Sleep, %r%
        Send {Space up}
    }
    Random, r, 5, 10
    Sleep, %r%
}
Esc::
ExitApp
return

但是,如果我在按下空白按鈕的同時按下新鍵,則該方法GetKeyState("Space")會因某種原因傳回 false。腳本目前正常啟動,但按任何其他鍵都與釋放空白鍵相同,這不是我想要的。

然後我想,也許Input可以幫助我。好吧,它又起作用了,但是一旦我按下另一個鍵,它就會停止。

這是我嘗試的結果Input,與我嘗試的第一個樣本相對(在時間上有偏移)產生了相同的結果。

#NoEnv
#SingleInstance Force
SendMode Input
loop {
    Input, OutputVar, B I L4 T0.05 V ; Had to keep it a low timeout due to the nature of the script
    if (InStr(OutputVar, Chr(32)))
    {
        Send {Space down}
        Random, r, 5, 15
        Sleep, %r%
        Send {Space up}
    }
    Random, r, 5, 10
    Sleep, %r%
}
Esc::
ExitApp
return

這也會失敗,因為按下新鍵會在內部釋放我的空白鍵,使其不再被按下。

我會嘗試執行類似的按鍵綁定事件Space::,但它也會從Send命令中觸發,從而創建無限循環。而且我不想按空格以外的任何其他鍵,因為我的幾個鍵已綁定到某物或另一物。

感覺就像過濾鍵或黏滯鍵,因為即使沒有自動熱鍵,空白鍵也會在按下任何其他鍵後釋放。但這兩個功能都已關閉。這不僅僅是空白鍵。一旦按下新按鍵,任何保持的按鍵都會被釋放。過濾鍵正是我想要阻止的,但是可以說沒有“反向過濾鍵”。是否可以克服這個硬體限制?即使在按下新鍵後,我怎麼能讓自動熱鍵發揮作用?

答案1

這是舊的,但它可以幫助將來遇到同樣問題的人。

而不是用來GetKeyState("Space")檢查GetKeyState("Space", "P")密鑰的物理狀態

答案2

當在空白鍵後按下另一個鍵時,GetKeyState 不再捕獲空白鍵。就像當您長按“A”發送垃圾郵件,然後繼續長按“B”而不釋放“A”時,您不會得到“aaaababab”,而只會得到“aaabbbbb”。我不明白當您在按空白鍵時按不同的鍵時要做什麼(可能是您想要垃圾郵件的組合?),但我相信您想要實現的目標是不可能的。

相關內容