基本上我想在代码中模拟用户点击windows按钮。我知道有SendKeys允许我将按键发送到Windows,如果我得到它们的句柄,但我无法弄清楚我需要处理以发送Windows按钮命令。例如。 Windows按钮+ L.稍微阅读了一下,似乎CTRL-ESC也应该弹出“开始”菜单,但不知道如何告诉它将密钥发送到Windows(如果可能的话)。任何帮助将不胜感激。
干杯!
答案 0 :(得分:9)
我不认为你可以使用SendKeys来做这件事,你需要调用一个API函数,可能需要keybd_event来发送CTRL + ESC或Windows键。
Here是在VB中以这种方式打开开始菜单的示例,here是pinboke.net上带有C#签名的keybd_event。
答案 1 :(得分:5)
用户通过WinKey快捷方式执行的某些操作可以通过其他方式以编程方式完成。要获取WinKey + L示例,您只需使用以下语句:
Process.Start("rundll32.exe", "user32.dll,LockWorkStation");
如果你能详细说明你想要完成什么,也许有比keybd_event更好的方法(正如Dale建议的那样)。
答案 2 :(得分:0)
我使用了 here 提供的 user703016 类并且工作正常!
参考:
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);
答案 3 :(得分:-2)
您需要使用全局键盘挂钩挂钩应用程序外的键盘。有一篇关于如何做到的文章here。