8

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
  • 95
  • 1
  • 2
  • 4

1 Answers1

15

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
  • 36,281
  • 7
  • 84
  • 109
  • 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