Hotkey wont work if its modifier is also being used as part of the trigger - windows

This issue seems to only occur in this one program.
I have the hotkey Shift+a set in this programs hotkey editor dialog, I want to trigger it in AHK using Rshift and w;
RShift & w::
SendInput, +{a}
Return
For the life of me, it will not work. I press Rshift and w and nothing happens at all. Triggering the hotkey manually by pressing shift and a works just fine.
The strange thing is the following works:
LCtrl & w::
SendInput, +{a}
Return
So does this:
w::
SendInput, +{a}
Return
I also tried to send Rshift back up before triggering the hotkey, no luck:
RShift & w::
SendInput, {RShift up}
SendInput, +{a}
Return
Is there a rule that says you cant use the same modifier as the target hotkey in the trigger that I missed?
please dont suggest that I use other modifier keys, shift +[key] is all that I have left.
Any help would be greatly appreciated!

Firstly, you shouldn't use a custom hotkey combination when a modifier exists (unless you have a good reason to):
For standard modifier keys, normal hotkeys typically work as well or better than "custom" combinations. For example, <+s:: is recommended over LShift & s::.
And secondly you shouldn't escape keys in a Send(docs) command that don't need escaping:
Enclosing a plain ASCII letter (a-z or A-Z) in braces forces it to be sent as the corresponding virtual keycode, even if the character does not exist on the current keyboard layout. In other words, Send a produces the letter "a" while Send {a} may or may not produce "a", depending on the keyboard layout. For details, see the remarks below.
And then about the problem itself:
I of course can't know if this will work, but I'd simply try the following:
>+w::a
This would work because because the remapping syntax actually uses the blind sendmode.
Alternatively, you could, of course, just manually use the blind sendmode:
>+w::SendInput, {Blind}a

Related

AutoHotKey: make Win+Tab act as Alt+Tab, but remap all other Win+ combinations as Ctrl+

I am trying to make my MacBook in Windows behave similar to macOS: so I can switch between apps using Win+Tab (i.e., replicate the Alt+Tab action), but have all the Ctrl+... actions (like, Ctrl+C, Ctrl+V, Ctrl+Z, etc) be accessible using the Win key (Win+C, Win+V, Win+Z).
In other words, I am trying to :
Remap Win key to Ctrl in all key combinations, but also
Have the Win+Tab act exactly as Alt+Tab (and I don't care if Ctrl+Tab stops
working as Ctrl+Tab, because I am not using that key combination at
all).
I am able to separately individually achieve 1. using LWin::Ctrl, and 2. using LWin & Tab::AltTab, but I cannot make them work together. Whenever I have something like
LWin::Ctrl
LWin & Tab::AltTab
or
LWin::Ctrl
Ctrl & Tab::AltTab
it just stops working, I am using Windows 10.
Did you try to use the symbols like documented here?
For your snippet that would mean:
LWin::Ctrl
LWin & Tab::Send, !{Tab}
There is a problem with this, as it simulates closed keystokes (regard !{Tab} as {Alt Down}{Tab}{Alt Up}. If you want to press and hold Win and then use Tab (or eventually tab multiple times), this doesn't work. To adress this issue, I found three main workarounds:
)
Let Alt stick to being pressed down:
LWin::Ctrl
LWin & Tab::Send, {Alt Down}{Tab}
LWin & Capslock::Send, {Alt Up} ;Suppose you won't use that hotkey elsewhere
)
Use something this solution by 2501:
h::AltTabMenu ; Opens the menu. Press second time to close.
n::AltTab ; Alt-Tabs through forwards
m::ShiftAltTab ; Alt-Tabs through backwards
The underlying principles/functionalities are documented here.
) Dig into AHK really deep: here (which is referenced in 1)
Annotation: Be aware that
<#::Ctrl
<#Tab::!Tab
does not work as Windows then handles the win key on its own first. You can verify This by testing:
<#::
MsgBox test
return
<#Tab::
MsgBox test
return

Remapping Alt key to Ctrl key in AutoHotKey causes both keys to be pressed

So, just like the title says, whenever I remap my LAlt key to LCtrl (or LCtrl to LAlt) they both get pressed when either key is used, and this causes a variety of issues.
The main reason I need these keys to be swapped is for use with a Mac keyboard on a Windows 7 computer. Honestly, though, it is only the beginning of my problem. I would actually like the LAlt key to be the LCtrl key, the LWin key to be the LAlt key, and the LCtrl key to be the LWin key so it appropriately emulates the Mac keyboard for personal use within Pro Tools 10. When I attempt this 3-way-swap, LCtrl and LWin function properly (as LWin and LAlt respectively), however, the LAlt key continues to press both LCtrl and LAlt anyways.
My code looks like this:
#IfWinActive
LAlt::LCtrl
LWin::LAlt
LCtrl::LWin
Return
I am fairly new to AHK, but this shouldn't be overly complicated, right? It's pretty short and sweet, and I'm not even worried about the Alt+Tab ordeal; I just need to figure out the issue so these three buttons can be swapped correctly. If anyone has any clue as to why this might be happening, I would be profoundly grateful. Thanks for your time and effort.
I think your hotkeys are probably triggering each other.
When you hit LALT, it sends LCTRL, which triggers LALT...
When you have a hotkey whose output matches the input of another hotkey, prefix your hotkeys with $ to stop them triggering each other:
$LAlt::LCtrl
$LWin::LAlt
$LCtrl::LWin
Also, I don't think your #IfWinActive is doing anything, since it has no WinTitle param, plus the return at the end is not how you end an #IfWinActive block, you start it with #IfWinActive <WinTitle> and end it with #IfWinActive

AutoIt 3 Inputing keyboard keys by GUI

How can I create a GUI element like the one of type "Input" that would register current keyboard keystroke, but I'm not talking about any letter or number, but rather special buttons like CTRL, TAB or Enter?
As far as i know there is no special GUI element handling that.
There are some "workarounds" like
When something gets written check if CTRL (or anything else) is pressed
_IsPressed()
Catch if you press CTRL with Hotkey and then make a Funktion to insert it into the Input
HotKeySet({CTRL},_insertCTRL);
Does one of these work for you?

Binding to Ctrl-Shift in AutoHotKey

I want to use AutoHotKey to bind a command to Ctrl+Shift, in the same way that Windows detects it in order to change text direction from right-to-left to left-to-right. That is: I want it to be invoked when Ctrl+Shift is let go, and only if no keys were pressed between pressing Ctrl+Shift and letting them go.
I bound a hotkey on ^~ Shift Up and I expected it to behave the same way as when Windows binds to it for changing the text direction. But, I found that it gets invoked even in cases where I don't want it to be invoked.
For example, I could be selecting a few words by pressing Ctrl and Shift, and then using the arrow keys. Then I let go of Ctrl and Shift and the hotkey gets invoked. I don't want this. I want a hotkey that gets invoked only if I held nothing else then Ctrl and Shift. If I use any other keys, I want the hotkey not to be invoked.
Is there a way to do this with AHK?
#InstallKeybdHook
Hotkey, ^LShift Up, ControlShiftUp
Return
ControlShiftUp:
if (A_PriorKey != "LShift") ; [v1.1.01+]
return
; do something
msgbox hi
Return

How to hijack the Caps Lock key for Cut, Copy, Paste keyboard operations

Here is what I am trying to accomplish:
To Copy, press and release Caps Lock ONCE
To Paste, press and release Caps Lock TWICE, quickly
To Cut, press Ctrl+Caps Lock
The reason I want to do this is often times i find my self looking down to press the correct X/C/V key, since they're all next to each other (atleast on a QWERTY keyboard).
How can I do this on a standard keyboard (using Windows), so that it applies to the entire system and is transparent to all applications, including to Windows Explorer? If not possible with a standard keyboard, can any of the "programmable numeric keypads" do this you think?
In the above, by "transparent" I mean "the application should never know that this keystroke was translated. It only gets the regular Ctrl+X/C/V code, so it behaves without any problems".
Ps. Not sure of all the tags that are appropriate for this question, so feel free to add more tags.
SOLVED. UPDATE:
Thank you to #Jonno_FTW for introducing me to AutoHotKey.
I managed all three requirements by adding the following AHK script in the default AutoHotKey.ahk file in My Documents folder:
Ctrl & CapsLock::
Send ^x
Return
CapsLock::
If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 1000)
Send ^v
Else
Send ^c
Return
That was easy!
NOT COMPLETELY SOLVED. UPDATE:
The above works in Notepad, but NOT in Explorer (copying files for example) or MS Office (even text copying does not work). So, I need to dig around a bit more into AutoHotKey or other solutions. Will post a solution here when I find one.
In the meantime, if someone can make AutoHotKey work for everything I need, please reply!
ALL SOLVED. UPDATE:
All I had to do was to change the capital "C"/X/Z to lowercase "c"/x/z. So Send ^C became Send ^c. It now works in ALL programs inlcuding Windows Explorer! Fixed code above to reflect this change.
I believe the program you are looking for is AutoHotkey.
You need a Global Keyboard Hook.
Very nice! Been looking for something like this for a while.
My script is slightly different, making use of shift or control combinations for cut/copy, then CapsLock on its own is always paste.
Ctrl & CapsLock::
Send ^x
Return
Shift & CapsLock::
Send ^c
Return
CapsLock::
Send ^v
Return
If you wanted to retain the option of retaining the Caps Lock function, I presume you could always remap e.g. Alt-CapsLock for this. I couldn't get it to toggle correctly when I tried it though.

Resources