SendKeys.Send和Windows Key

dem*_*zia 6 .net winforms

我正在尝试为我的WinForm应用程序创建一个键盘触发器,该应用程序调用Windows键+#(#=数字键)快捷方式,该快捷方式在任务栏的第n个插槽中启动应用程序的新实例.

例如,我想运行Photoshop,它位于我的任务栏的第一个插槽中.

WinKey+1
Run Code Online (Sandbox Code Playgroud)

我听说过CTRL + ESC替代方案,但下面的代码不起作用.

SendKeys.Send("^{ESC}1")
Run Code Online (Sandbox Code Playgroud)

还有其他选择吗?我需要为此运行批处理文件吗?

谢谢!:)

use*_*016 13

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

你这么称呼它:

KeyboardSend.KeyDown(Keys.LWin);
KeyboardSend.KeyDown(Keys.D4);
KeyboardSend.KeyUp(Keys.LWin);
KeyboardSend.KeyUp(Keys.D4);
Run Code Online (Sandbox Code Playgroud)

测试,它的工作原理.玩得开心!