2

Here is the code:

*Lalt::return

#if GetKeyState("Lalt", "P")

a::
   
   b::
   
   if GetKeyState("shift", "P")
   
   send ^+{%A_ThisHotkey%}
   
   else
   
      Send ^{%A_ThisHotkey%}
return

#if  

        

in the code above, when I press Lalt+a it sends Ctrl+a which is expected, but when I press Lalt+Shift+a it only sends Shift+a, shouldn't it send Ctrl+Shift+a ?!. I also noticed that if I press the Shift key first before pressing on Lalt it sends Alt+Shift+a. It sounds to me like the Shift key trumps Alt or it gets sent to my machine before going through AH K.

tried to use the * modifier and {blind} with send, but still when I press Lalt+shift+a, it only sends Shift+a

1 Answer 1

2

AHK (and Windows) is very finicky with modifiers keys, so it's normal to have issues when working with them.

First thing is that when you press Shift, the AHK hook changes from a:: to +a::, as now another hot key combination is being pressed.

The other issue is that {%A_ThisHotkey%} in the context of +a:: don't work as expected, returning +a, it just seems to return nothing.

Finally, this would be the result:

*Lalt::return

#if GetKeyState("Lalt", "P")


a::

   b::

      Send ^{%A_ThisHotkey%}
      
return

+a::  
   +b::
      Send ^%A_ThisHotkey%
   
return

#if  

For debuging, I used this env configurations:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
KeyHistory
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.