In my opinion, there are two possible ways to make point 2 work.
Method 1: keeps the Left Shift key's default behavior
shift + ; results in : colon key being pressed. You can get point 2 to work by adding tilde "~" key before `; and removing
else
send `;
With ~ you can keep the key's default behavior. The new script will look something like this
~`;::
if GetKeyState("LShift", "P")
Send `:
return
`; & x::
if GetKeyState("LShift", "P")
...
else
...
return
By using this method script will be able to send : with shift+;.
Method 2: removing the Left Shift key's default behavior
Add the following snippet in your code
LShift::
Send, {}
return
This snippet will make the point 2 work but will render Left Shift key pretty much useless for everything else.
EDIT
Method 3: Making ;
wait for x
Adding KeyWait
into the script will make it wait a certain amount of time before executing the code. Secondly using Lshift
+ ;
as an individual hotkey combination will output to :
, removing the need for using ~
in return.
`;::
KeyWait, `;, T0.2
Send `;
return
LShift & `;::
Send `:
return
`; & x::
KeyWait, `;, T0.2
if GetKeyState("LShift", "P")
...
else
...
return