Binding to Ctrl-Shift in AutoHotKey - windows

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

Related

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

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

How to replace Discard changes with Do you want to save changes

If Esc key is pressed in
MODIFY FILE test
window, Visual FoxPro shows
Discard changes
Yes No
prompt. How can I replace this with
Do you want to save changes to test.txt
Yes No Cancel
prompt ?
A Yes/No/Cancel prompt appears if I click on the close button in the upper right corner of the close window.
Is it possible to force it to appear when I press ESC also ?
Can ON KEY LABEL esc or some custom edit windows command be used or is there some other solution ?
Yes, you could solve it with ON KEY LABEL esc someFunctionCall(). The function has then to display the dialog you desire, and you also have to write the logic whether you pressed Yes, No or Cancel. Also keep in mind, that you have to issue ON KEY LABEL esc again, so the dialog won't show up everywhere.
Another solution would be hitting CTRL+S before you press Escape. With another dialog you have to move the mouse or press another button anyways, so there is no time to safe here.

How does TranslateAccelerator know about CTRL or SHIFT modifier?

I'm working in a program that uses Accelerator keys for user-defined hot keys, and every thing works fine. The user can set hotkeys using SHIFT, CTRL, or ALT. I know that using ALT generates a WM_SYSKEYDOWN rather than WM_KEYDOWN, so it's pretty obvious when ALT is held down.
TranslateAccelerator only takes a window handle, the accel table handle and a single KEYDOWN message. So, my question is, if the user presses CTRL+T, how does TranslateAccelerator know the CTRL key was also pressed?
I know that the CTRL generates a separate KEYDOWN command, and I specifically filtered those out (do not pass to TranslateAccelerator) to test a theory, but TranslateAccelerator is still working.

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?

How do you stop Visual Studio from waiting for the second part of a shortcut-combination?

If I press a shortcut combination (such as Ctrl+M) – VS waits for the second one. What if I want to cancel it? (e.g. if I mistakenly press the wrong letter and am not sure which one.)
It just waits, with the "(Ctrl+M) was pressed. Waiting for a second key of chord..." in the bottom of the screen.
How do I cancel it?
Press Escape. Usually it is not tied as a second keystroke.
I normally press Esc .
I don't know of any keyboard shortcut where Esc is the second key press.
There aren't many visual studio Chords that end with Esc so just hit Esc it'll say The key combination is not a command but it prevents you from performing a valid chord.
Another option is to record a no-op macro and assign it to Ctrl-M, Esc. It will say running macro at the bottom quickly and go away.
You are in Dvorak Keyboard mode in windows. Press Ctrl+Shift to get out of it...

Resources