簡體   English   中英

; 作為新的修飾鍵

[英]; as a new modifier key

我要; 成為一個新的修飾鍵。 以下工作幾乎完美。

`;::
if GetKeyState("LShift", "P")
    Send `:
else
    Send `;
return

`; & x::
if GetKeyState("LShift", "P")
    ...
else
    ...
return

以下願望清單中只有第 2 點不起作用。 有人知道如何修復此代碼嗎?

  1. ; 成為; 單獨按下時
  2. shift; to be :當單獨按下時
  3. ; x是第二個...
  4. shift ; x是第一個...

在我看來,有兩種可能的方法可以使第 2 點起作用。

方法一:保持左Shift鍵的默認行為

移位+ ; 結果冒號鍵被按下。 您可以通過在`;之前添加波浪號“~”鍵來使第 2 點起作用並刪除

else 
    send `;

使用 ~ 您可以保持密鑰的默認行為。 新腳本看起來像這樣

~`;::
    if GetKeyState("LShift", "P") 
        Send `:
return 

`; & x::
    if GetKeyState("LShift", "P")
        ...
    else
        ...
return

通過使用此方法腳本將能夠發送: with shift+; .

方法二:去掉左Shift鍵的默認行為

在您的代碼中添加以下代碼段

LShift::
    Send, {} 
return 

此代碼段將使第 2 點起作用,但會使左 Shift鍵對其他所有內容幾乎無用。

編輯

方法三:制作; 等待x

KeyWait添加到腳本中會使其在執行代碼之前等待一定的時間。 其次使用Lshift + ; 作為單獨的熱鍵組合,將 output 轉換為: ,無需使用~作為回報。

`;::
KeyWait, `;, T0.2
    Send `;
return

LShift & `;::
    Send `:
return 

`; & x::
KeyWait, `;, T0.2 
if GetKeyState("LShift", "P")
    ...
else
    ...
return 

以下工作完美,但由於代碼重復而代碼難看。 也許更簡潔的代碼是可能的。

started := 0
LShift & `;::
if started = 0
    started := A_TickCount
return
`;::
if started = 0
    started := A_TickCount
return

LShift & `; Up::
if A_TickCount - started < 500
    Send `:
started = 0
return

`; Up::
if A_TickCount - started < 500
    Send `;
started = 0
return

`; & x::
started = 0 ; <==== !
if GetKeyState("LShift", "P")
    ...
else
    ...
return

關鍵; 現在,只要它與x組合使用(無延遲)或按下超過半秒,就可以用作修飾鍵。 延遲不是必須的,可以消除; 它只是在那里防止將意外的修飾鍵誤解為; . 冒號:也可以正常工作。

#MaxThreadsPerHotkey 2 ; allow 2 "instances" of the hotkey subroutine to exist simultaneously

`;::
If (A_PriorKey = "`;") ; ; was pressed alone
    Send `;
return

LShift & `;:: Send :

`; & x::
if GetKeyState("LShift", "P") ;  ; & LShift & x
    Send a
else                          ; ; & x
   Send b
return

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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