I'm trying to make a keyboard trigger for my WinForm application that calls out Windows key + # (# = a number key) shortcut which launches a new instance of the application in the nth slot on the taskbar.
For example, I would like to run Photoshop, which is in the first slot of my taskbar.
WinKey+1
I've heard of the CTRL+ESC alternative, but the code below does not work.
SendKeys.Send("^{ESC}1")
Any other alternatives? Do I need to run a batch file for this?
Thanks! :)
Use SendWait to send keystrokes or combinations of keystrokes to the active application and wait for the keystroke messages to be processed. You can use this method to send keystrokes to an application and wait for any processes that are started by the keystrokes to be completed.
To specify that any combination of SHIFT, CTRL, and ALT should be held down while several other keys are pressed, enclose the code for those keys in parentheses. For example, to specify to hold down SHIFT while E and C are pressed, use "+(EC)".
Use the SendKeys Method to Perform Keystrokes Inside PowerShell. You can use the SendKeys() method to send keystrokes to the active application. The AppActivate() method activates the application Notepad so you can send keystrokes to it.
There are two methods to send keystrokes to an application: SendKeys. Send and SendKeys. SendWait. The difference between the two methods is that SendWait blocks the current thread when the keystroke is sent, waiting for a response, while Send doesn't.
CTRL+ESC
does not simulate the WIN
key, it just calls the start menu.
A bit of P/Invoke always makes everyone happy:
using System.Runtime.InteropServices;
using System.Windows.Forms;
static class KeyboardSend
{
[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
private const int KEYEVENTF_EXTENDEDKEY = 1;
private const int KEYEVENTF_KEYUP = 2;
public static void KeyDown(Keys vKey)
{
keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
}
public static void KeyUp(Keys vKey)
{
keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
}
And you call it this way :
KeyboardSend.KeyDown(Keys.LWin);
KeyboardSend.KeyDown(Keys.D4);
KeyboardSend.KeyUp(Keys.LWin);
KeyboardSend.KeyUp(Keys.D4);
Tested, it works. Have fun!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With