如何使用C# SendKeys编程方式按下Windows键

9
基本上,我想在代码中模拟用户点击Windows键。我知道有SendKeys可以让我发送按键到Windows,但我无法确定需要获取哪些内容才能发送Windows键命令。例如,Windows键 + L。经过一番研究,似乎CTRL-ESC也应该弹出开始菜单,但不确定如何将其发送给Windows(如果可能的话)。非常感谢您的帮助。
4个回答

9

我认为你无法使用SendKeys来完成此操作,你需要调用API函数,可能是keybd_event,来发送CTRL+ESC或Windows键。

这里有一个在VB中打开开始菜单的示例,这里是在pinvoke.net上使用keybd_event的C#签名。


5

用户通过WinKey快捷方式执行的一些操作可以以其他方式进行编程。以您的WinKey+L示例为例,您可以改用以下语句:

Process.Start("rundll32.exe", "user32.dll,LockWorkStation");

如果您能详细说明您想要实现什么,也许有比keybd_event更好的方法(正如Dale所建议的那样)。

在您上面的陈述中,如果您处于三台计算机的网络中,是否有可能锁定特定用户? - wam090

0
我使用了这里提供的 链接 by 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);

-2
你需要使用全局键盘钩子来钩取应用程序外的键盘。这里有一篇关于如何实现的文章here

2
错误。那只有在你想要监听按键时才是正确的,而不是当你想要发送按键时。 - Allon Guralnek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接