我正在尝试为我的WinForm应用程序创建一个键盘触发器,该应用程序调出Windows键+#(#=数字键)快捷方式,该快捷方式在任务栏的第n个插槽中启动应用程序的新实例。
例如,我想运行Photoshop,它位于我任务栏的第一个插槽中。
WinKey+1
我听说过CTRL + ESC替代方案,但下面的代码不起作用。
SendKeys.Send("^{ESC}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);
经测试,它有效。玩得开心!