簡體   English   中英

如何在按下鍵而不是在釋放鍵時觸發熱鍵而不暴露其本機 function?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM