如何在C#winforms中使用keybd_event模拟Ctrl + Alt + H.

时间:2012-12-11 21:08:24

标签: c# winforms keyboard keypress

如何使用keybd_event()模拟Ctrl + Alt + H?以下代码不起作用:

    keybd_event((byte)Convert.ToInt32(Keys.Control), (byte)MapVirtualKey(Convert.ToInt32(Keys.Control), 0), 0, 0);
        keybd_event((byte)Convert.ToInt32(Keys.Alt), (byte)MapVirtualKey(Convert.ToInt32(Keys.Alt), 0), 0, 0);
        keybd_event((byte)Keys.H, (byte)MapVirtualKey(Convert.ToInt32(Keys.H), 0), 0, 0);
        keybd_event((byte)Keys.H, (byte)MapVirtualKey(Convert.ToInt32(Keys.H), 0), KEYEVENTF_KEYUP, 0);
        keybd_event((byte)Convert.ToInt32(Keys.Alt), (byte)MapVirtualKey(Convert.ToInt32(Keys.Alt), 0), KEYEVENTF_KEYUP, 0);
        keybd_event((byte)Convert.ToInt32(Keys.Control), (byte)MapVirtualKey(Convert.ToInt32(Keys.Control), 0), KEYEVENTF_KEYUP, 0);   

2 个答案:

答案 0 :(得分:0)

您应该覆盖ProcessCmdKey方法。

请看这个链接:

Picking up keystrokes Ctrl-Alt-Q

答案 1 :(得分:0)

您可以使用SendKeys执行此操作:

SendKeys.Send("^%H");

http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx

修改 (见下面的评论......)

您希望在桌面上启动已使用一组特定热键设置的Windows快捷方式。在这种情况下CTRL + ALT + H.您想编写一个将执行该快捷键组合的应用程序。

为了实现这一点,您的桌面必须具有“焦点”。这意味着没有其他窗户应该启动。因此,启动应用程序,最小化所有其他窗口,然后按应用程序上的按钮。以下是按钮背后的代码:

    private void button1_Click(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Minimized;
        SendKeys.SendWait("^%h");
    }

这将最小化当前窗口,从而将焦点放在桌面上。然后它会将CTRL,ALT和H键发送到桌面,这将启动你的快捷方式。