[英]How to fire a hotkey when a key is pressed rather than when it is released without exposing its native function?
我想要的是簡單地使用鼠標的 XButton1 和 XButton2 作為 WheelRight 和 WheelLeft。 我最初是這樣做的:
XButton1::WheelRight
XButton2::WheelLeft
但是,我對此並不滿意,因為每次我按下 XButton 時,它只會滾動一次,而且只有在釋放鍵時才會滾動。 所以我想出了這個:
~XButton2::
Send {WheelLeft}
Sleep, 500
while GetKeyState("XButton2")
{
Send {WheelLeft}
Sleep, 50
}
return
可以為 XButton1 編寫類似的代碼。 這很好用,但唯一的問題是“~”暴露了 XButton2(即“轉發”)的本機 function,這是我不想要的。 (釋放鍵時觸發。)我試圖從鼠標軟件中禁用該鍵,但這只會導致熱鍵完全停止工作。
現在,我知道一個簡單的解決方法是 map XButtons 到一些很少使用的鍵,如 RShift 和 RCtrl,但我想要的是一個更優雅和直接的解決方案來解決這個問題。 將它們映射到數字鍵盤上的鍵對我來說也不是一個選項,因為我已經使用過它,而且我寧願不為此單獨鎖定鍵盤上的鍵。
編輯:
我意識到我最初編寫的代碼無法像我后來編寫的代碼那樣工作,因為我還有其他為 XButton1 和 XButton2 編寫的熱鍵,例如:
XButton2 & WheelUp::
Send {Volume_Up}
return
當我刪除這些時,初始代碼按我的意願工作。 通過將 F13 分配給 XButton1 並將 F14 分配給 XButton2,我想出了一個解決方法來保留我的所有熱鍵,因為這些鍵甚至不存在於我的鍵盤上。 我仍然懸而未決這個問題,因為我還沒有得到我最初想要的答案。 (邏輯是,將來可能會有人回答,這可能會幫助以后與我不同的其他人無法找到任何解決方法。)
您可以使用上下事件和計時器,例如:
*XButton1::SetTimer, WheelRight, 100
*XButton2::SetTimer, WheelLeft, 100
*XButton1 Up::SetTimer, WheelRight, Off
*XButton2 Up::SetTimer, WheelLeft, Off
WheelRight()
{
SendInput, {Blind}{WheelRight}
}
WheelLeft()
{
SendInput, {Blind}{WheelLeft}
}
或者也許是更清潔的版本:
;In the auto execute section
WheelLeft := Func("ScrollWheel").Bind("Left")
WheelRight := Func("ScrollWheel").Bind("Right")
;...
*XButton1::SetTimer, % WheelRight, 100
*XButton2::SetTimer, % WheelLeft, 100
*XButton1 Up::SetTimer, % WheelRight, Off
*XButton2 Up::SetTimer, % WheelLeft, Off
ScrollWheel(direction)
{
SendInput, % "{Blind}{Wheel" direction "}"
}
*
(docs)被使用,所以你也可以在使用鍵的同時按住修飾符,並且使用了盲發送模式,所以發送命令不會刪除修飾符。
調整計時器的延遲以更快或更慢地滾動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.