SendKeys.Send и ключ Windows - PullRequest
       1

SendKeys.Send и ключ Windows

6 голосов
/ 20 июня 2011

Я пытаюсь сделать триггер клавиатуры для моего приложения WinForm, которое вызывает комбинацию клавиш Windows + # (# = цифровая клавиша), которая запускает новый экземпляр приложения в n-м слоте на панели задач.

Например, я хотел бы запустить Photoshop, который находится в первом слоте моей панели задач.

WinKey+1

Я слышал об альтернативе CTRL + ESC, но код ниже не работает.

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

Есть ли другие альтернативы?Нужно ли для этого запускать командный файл?

Спасибо!:)

1 Ответ

13 голосов
/ 20 июня 2011

CTRL+ESC не имитирует клавишу WIN, он просто вызывает меню пуска.

Немного P / Invoke всегда делает всех счастливыми:

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);
    }
}

И выНазовите это так:

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

Проверено, все работает.Веселись!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...