SendKeys.Send and Windows Key

后端 未结 1 1179
执笔经年
执笔经年 2020-11-30 11:40

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

相关标签:
1条回答
  • 2020-11-30 12:32

    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!

    0 讨论(0)
提交回复
热议问题