Isolate Hotkeys to Only Operate for an Open or Active Window
In the Weekly Tip, “IfWinActive Versus #IfWinActive“, I recommended isolating Hotkeys to specific windows. This time I offer a practical example.
For more information, see “Chapter Two: Block Windows Shortcuts with AutoHotkey” and “Chapter Three: AutoHotkey #Directives for Context-Sensitive Hotkeys—#IfWinActive” of the book AutoHotkey Hotkey Tips, Tricks, and Techniques.
The #IfWinExist directive offers a number of advantages when creating temporary Hotkeys:
- The Hotkeys activate only when AutoHotkey opens the controlling window.
- If other conflicting Hotkeys exist, the temporary Hotkeys take precedence as long as the window exists.
- After closing the controlling window, the Hotkeys deactivate minimizing interference with other possible Hotkeys or shortcuts.
After last week’s menu shortcut tip, I looked at the problem of adding multiple Hotkeys to the MultiPaste.ahk script. Unlike menus, AutoHotkey offers no simple method for adding single-key shortcuts to a MsgBox. While the Hotkey which runs the Input command works, it requires first hitting the Hotkey combination, then the selection of a number from the keyboard. By adding temporary Hotkeys to the script, a paste operation only require one Hotkey combination. However, we only want these Hotkeys available when the always-on-top MsgBox appears.
First, I used the #IfWinExist directive to isolate the Hotkeys to the MsgBox window:
#IfWinExist MultiPaste !1::SendInput, % Transaction[1] !2::SendInput, % Transaction[2] !3::SendInput, % Transaction[3] !4::SendInput, % Transaction[4] !5::SendInput, % Transaction[5] !6::SendInput, % Transaction[6] !7::SendInput, % Transaction[7] !8::SendInput, % Transaction[8] !9::SendInput, % Transaction[9] !0::SendInput, % Transaction[10] #IfWinExist
Each Hotkey uses the item number in combination with the ALT key (ALT+1, ALT+2, ALT+3,…ALT+0). I could have used single-key numbers:
#IfWinExist MultiPaste 1::SendInput, % Transaction[1] 2::SendInput, % Transaction[2] 3::SendInput, % Transaction[3] 4::SendInput, % Transaction[4] 5::SendInput, % Transaction[5] 6::SendInput, % Transaction[6] 7::SendInput, % Transaction[7] 8::SendInput, % Transaction[8] 9::SendInput, % Transaction[9] 0::SendInput, % Transaction[10] #IfWinExist
While this code creates single-key shortcuts, the snippet also prevents the use of the number keys with the MultiPaste MsgBox open.
In order to make the script portable for adding to a master script, I needed to add the title Multi Paste to the MsgBox command:
MsgBox, 4096, Multi Paste , % "[1] " . Transaction[1] . "`r"
. "[2] " . Transaction[2] . "`r"
. "[3] " . Transaction[3] . "`r"
. "[4] " . Transaction[4] . "`r"
. "[5] " . Transaction[5] . "`r"
. "[6] " . Transaction[6] . "`r"
. "[7] " . Transaction[7] . "`r"
. "[8] " . Transaction[8] . "`r"
. "[9] " . Transaction[9] . "`r"
. "[0] " . Transaction[10]
Note: I added the space to the title to prevent confusion between the MsgBox window and the open script in Notepad. I also needed to add the intervening space to the title in the #IfWinExist directive:
#IfWinExist Multi Paste
The posted MultiPaste.ahk script contains all of these changes.
Extra Tip: You can also replace the #IfWinExist line with this format:
#If WinExist("Multi Paste")
To avoid Hotkey conflicts, I recommend you use this technique to isolate them to an active/existing window whenever possible.
For more information, see “Chapter Two: Block Windows Shortcuts with AutoHotkey” and “Chapter Three: AutoHotkey #Directives for Context-Sensitive Hotkeys—#IfWinActive” of the book AutoHotkey Hotkey Tips, Tricks, and Techniques. (Chapter Three clears up the confusion between AutoHotkey’s IfWinActive command and the #IfWinActive directive.)
Click the Follow button at the top of the sidebar on the right of this page for e-mail notification of new blogs. (If you’re reading this on a tablet or your phone, then you must scroll all the way to the end of the blog—pass any comments—to find the Follow button.)
This post was proofread by Grammarly
(Any other mistakes are all mine.)
(Full disclosure: If you sign up for a free Grammarly account, I get 20¢. I use the spelling/grammar checking service all the time, but, then again, I write a lot more than most people. I recommend Grammarly because it works and it’s free.)
[…] the MultiPaste.ahk script discussed in “Add Temporary Hotkeys to MsgBox Windows,” I use the #If directive to activate a set of Hotkeys only when the MsgBox window exists. […]
LikeLike