【问题标题】:Holding Alt Button Using Windows Messages使用 Windows 消息按住 Alt 按钮
【发布时间】:2011-06-07 14:03:29
【问题描述】:

如何使用 Windows 消息按住 ALT 按钮?

是否有 WM_KEYHOLD 或类似的东西?

这是屏幕截图的代码,但我猜有些东西是遗漏的。我认为我使用的键码不好,对于 0x70 它发送 F1。对于 0x46,它会发送令人讨厌的窗口声音。

    const uint WM_SYSKEYDOWN = 260;
    const uint VK_MENU = 18;//virtual key code of Alt key
    const uint VK_SNAPSHOT = 44;//virtual key code of Snapshot key

    [DllImport("User32.Dll")]
    public static extern long PostMessage(IntPtr hWnd, UInt32 wMsg, long wParam, long lParam);

    [DllImport("user32.dll")]
    public static extern IntPtr FindWindow(String sClassName, String sAppName);

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetForegroundWindow();

    private void timer1_Tick(object sender, EventArgs e)
    {
        IntPtr hwnd = GetForegroundWindow();
        //PostMessage(hwnd, WM_SYSKEYDOWN, VK_MENU, 1);
        PostMessage(hwnd, WM_SYSKEYDOWN, VK_SNAPSHOT, 1);
    }

【问题讨论】:

  • 这只是为了您的应用程序,还是您想发送到整个系统的东西?

标签: c# winforms key windows-messages keyhook


【解决方案1】:

DanielB 链接的Docs 引用了lParam 定义ALT 状态的第29 位,你试过吗?

位 29 - 上下文代码。如果在按下 ALT 键的同时按下该键,则值为 1;如果 WM_SYSKEYDOWN 消息发布到活动窗口,则为 0,因为没有窗口具有键盘焦点。

【讨论】:

  • 试了 29 次,和 1 一样,它只是发出了令人讨厌的窗口声音,就像你尝试在消息框中输入时一样
  • 算了,有钥匙码的东西。我不知道什么是正确的。我尝试输入 0x70,它发送 F1。我尝试输入 0x46 并发出这样的声音。
  • @user779444:第 29 位实际上是 0x10000000。大多数低数字只会告诉目标程序您反复点击按钮(最多 0xFFFF)
【解决方案2】:

据我了解,发WM_SYSKEYDOWN/WM_KEYDOWN应该就够了。见Docs

【讨论】:

  • 我认为您必须为 VK_SNAPSHOT 发送 WM_KEYUP。您是否尝试制作多个快照。顺便提一句。如果您想要窗口的屏幕截图,请查看 Managed Windows APIManagedWinapi.Windows.SystemWindow.Image
  • 键码是here VK_MENU 0x12 ALT key VK_SNAPSHOT 0x2C PRINT SCREEN key
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
相关资源
最近更新 更多