我正在嘗試創建一個按下空格按鈕的腳本,只要物理按下它即可。例如,如果我按住空白鍵,腳本將複製空格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”。我不明白當您在按空白鍵時按不同的鍵時要做什麼(可能是您想要垃圾郵件的組合?),但我相信您想要實現的目標是不可能的。