10

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! :)

demijnzia
  • 115
  • 1
  • 2
  • 5

1 Answers1

18

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!

user703016
  • 37,307
  • 8
  • 87
  • 112
  • 1
    Thank you! You used WinKey+4 in your example. To change it to WinKey+1, just change Keys.D4 to Keys.D1. Thanks again! :) – demijnzia Jun 20 '11 at 06:58