如何使用C#SendKeys以编程方式按Windows按钮

时间:2009-09-17 08:12:10

标签: c# windows button sendkeys

基本上我想在代码中模拟用户点击windows按钮。我知道有SendKeys允许我将按键发送到Windows,如果我得到它们的句柄,但我无法弄清楚我需要处理以发送Windows按钮命令。例如。 Windows按钮+ L.稍微阅读了一下,似乎CTRL-ESC也应该弹出“开始”菜单,但不知道如何告诉它将密钥发送到Windows(如果可能的话)。任何帮助将不胜感激。

干杯!

4 个答案:

答案 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