【问题标题】:How can I simulate Ctrl+Alt+H using keybd_event in C# winforms [closed]如何在 C# winforms 中使用 keybd_event 模拟 Ctrl+Alt+H [关闭]
【发布时间】:2012-11-29 11:51:36
【问题描述】:

如何使用 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);   

【问题讨论】:

  • 你用谷歌搜索并没有找到任何答案?!
  • “不起作用”可能意味着很多事情,例如(什么都没发生,异常,错误的事情发生了,随机的事情发生等)你能具体点
  • 在winform上......实际上什么都没有发生............我能够提高 Ctrl+H ,但是当我尝试 Ctrl+Alt+H 时没有任何反应!

标签: c# winforms keyboard keypress


【解决方案1】:

你应该重写ProcessCmdKey方法。

查看此链接:

Picking up keystrokes Ctrl-Alt-Q

【讨论】:

  • 这似乎仅限于 winforms
【解决方案2】:

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

SendKeys.Send("^%H");

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

编辑 (见下面的 cmets...)

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

为了让这个工作你的桌面必须有“焦点”。这意味着不应启动其他窗口。因此,启动您的应用程序,最小化所有其他窗口,然后按下应用程序上的按钮。这是您的按钮后面应该有的代码:

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

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

【讨论】:

  • 我试过了,但没有任何反应......我认为有问题......这是我的代码:
  • 您发布的代码会将密钥发送到该表单(您按下按钮的那个)是预期的吗?如果您想将密钥发送到另一个窗口,那么您要接收密钥的窗口/表单必须处于活动状态并且位于最前面。
  • 我的错误,我以为它会引发全局按键事件。那么,如何引发全局 Ctrl+Alt+H 按键事件?
  • 我不确定您所说的“全球”是什么意思。按键需要被某些东西消耗。如果你在 Word 中,那么 word 正在消耗它们。如果您在游戏中,那么该游戏正在消耗它们。如果没有窗口,那么您的桌面正在使用它们。如果您希望特定窗口使用您的击键,则该窗口必须是字体和中心,就像您从键盘输入击键一样。如果需要,您也可以在发送击键之前使用调用来查找窗口并将其向前移动。
猜你喜欢
  • 2013-01-01
  • 2016-02-17
  • 2014-01-13
  • 2023-01-27
  • 2012-08-15
  • 2022-01-19
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多