2015-04-17 1 views
1

J'utilise AutoHotkey pour cartographier la Caps Lock à Ctrl, et d'essayer d'utiliser le Ctrl + K comme Tab dans Total Commander.casquettes de AutoHotkey verrouillent à ne pas libérer ctrl

SetCapsLockState AlwaysOff 
Capslock::Ctrl 

#ifWinActive ahk_class TTOTAL_CMD 
    ^k::Send, {Tab} 
#ifWinActive 

Quand je l'aide de la Ctrl + K remap avec le Ctrl normal, il fonctionne très bien. Mais quand j'essaye de l'employer avec le Caps Lock + K, alors cela fonctionne pour la première fois, mais tandis que je ne libère pas le Caps Lock, il envoie k au lieu de Tab. Le journal dit:

008: SetCapslockState,AlwaysOff 
009: Return (3.49) 
; Hiting Ctrl + K twice. 
081: Send,{Tab} (0.02) 
081: Return (0.30) 
081: Send,{Tab} (0.02) 
081: Return (1.59) 
; Hiting Caps Lock + K twice. 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl DownTemp} 
009: Return (0.47) 
081: Send,{Tab} (0.01) 
081: Return (0.73) 
; The second Tab is missing, a simple K sent. 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl Up} 
009: Return (3.06) 

Voici le journal, quand j'appuyant sur Caps Lock + K, le relâcher, puis en appuyant sur againg:

009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl DownTemp} 
009: Return (0.34) 
081: Send,{Tab} (0.01) 
081: Return (0.08) 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl Up} 
009: Return (0.34) 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl DownTemp} 
009: Return (0.19) 
081: Send,{Tab} (0.01) 
081: Return (0.06) 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl Up} 
009: Return (3.00) 

Je pense que la source du problème peut être dans le CapsLock::Ctrl, mais je n'a trouvé aucune solution pour cela. Quelqu'un rencontre ce problème?

EDIT:

Une autre chose intéressante est quand je le code envoyer au lieu d'une simple clé, il fonctionne sans relâcher le verrouillage des majuscules:

^e::PostMessage, 1075, 3005, , , ahk_class TTOTAL_CMD ; cm_SwitchToNextTab=3005;Switch to next Tab (as Ctrl+Tab) (see TOTALCMD.INC file) 

Le journal dit:

008: SetCapslockState,AlwaysOff 
009: Return (8.88) 
; Ctrl + E twice. 
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD 
058: Return (0.36) 
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD 
058: Return (1.76) 
009: SetKeyDelay,-1 
; Caps Lock + E twice. 
009: Send,{Blind}{Ctrl DownTemp} 
009: Return (0.34) 
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD 
058: Return (0.39) 
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD 
058: Return (0.28) 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl Up} 
009: Return (1.47) 

; Caps Lock + E twice with releasing. 
008: SetCapslockState,AlwaysOff 
009: Return (2.54) 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl DownTemp} 
009: Return (0.34) 
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD 
058: Return (0.09) 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl Up} 
009: Return (0.25) 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl DownTemp} 
009: Return (0.23) 
058: PostMessage,1075,3005,,,ahk_class TTOTAL_CMD 
058: Return (0.08) 
009: SetKeyDelay,-1 
009: Send,{Blind}{Ctrl Up} 
009: Return (1.98) 

Répondre

1

Je me souviens d'avoir rencontré des problèmes étranges comme celui-ci lorsque je faisais aussi des remakes de CapsLock. Au lieu de mapper CapsLock pour contrôler et ensuite utiliser cette combinaison dans votre raccourci clavier, vous pouvez configurer CapsLock pour ne rien faire mais vérifier l'état de la clé dans la directive #If. Je pense que cela permettrait de résoudre la plupart de ces problèmes étranges.

SetCapsLockState, AlwaysOff 
CapsLock::Return 

#If WinActive("ahk_class TTOTAL_CMD") and GetKeyState("CapsLock", "P") 
    k::Send, {Tab} 
+0

Cela fonctionne très bien - j'ai juste fait une petite modification pour que le fonctionnement de CapsLock :: Ctrl soit en dehors de Tcmd. https://gist.github.com/BimbaLaszlo/99bd39b429964e990070 – bimlas

0

Personnellement, je voudrais juste vérifier si votre fenêtre est active sur^k keypress et aller à partir de là. J'ai utilisé Untitled - Notepad pour que je puisse tester.

CapsLock::Ctrl 
^k:: 
{ 
    IfWinActive, Untitled - Notepad 
     SendInput, {tab} 
    else 
     Msgbox 
    return 
} 
+0

Il diffère de mon script dans seulement l'ordre des lignes et la détection de la fenêtre. Le problème est avec "Untitled - Notepad" qu'il va changer lorsque vous enregistrez le fichier avec un autre nom. – bimlas

+0

Bien sûr, cela va changer. Je l'ai simplement utilisé comme exemple. Le PO devrait évidemment le changer pour répondre à ses besoins. - Je n'utilise pas non plus de directive - vous l'êtes. – fischgeek