SendKeys.Send和Windows Key

时间:2011-06-20 06:31:31

标签: .net winforms

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

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

WinKey+1

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

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

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

谢谢! :)

1 个答案:

答案 0 :(得分: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);
    }
}

你这么称呼它:

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

经测试,它有效。玩得开心!