SendKeys.Send and the Windows Key

I am trying to make a keyboard trigger for my WinForm application, which calls the Windows shortcut key + # (# = key number), which launches a new instance of the application in the nth slot on the taskbar.

For example, I would like to launch Photoshop, which is in the first slot of my taskbar.

WinKey+1

I have heard of an alternative to CTRL + ESC, but the code below does not work.

SendKeys.Send("^{ESC}1")

Any other alternatives? Do I need to run a batch file for this?

Thank!:)

+5
source share
1 answer

CTRL+ESCIt doesn’t simulate a key WIN, it just calls the Start menu.

A little P / Invoke always pleases everyone:

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 that:

KeyboardSend.KeyDown(Keys.LWin);
KeyboardSend.KeyDown(Keys.D4);
KeyboardSend.KeyUp(Keys.LWin);
KeyboardSend.KeyUp(Keys.D4);

Tested, it works. Enjoy!

+11

All Articles