使用 Windows 消息按住 Alt 按钮

发布于 2024-11-13 22:32:42 字数 936 浏览 7 评论 0原文

如何在 Windows 消息中按住 ALT 按钮?

有 WM_KEYHOLD 或类似的东西吗?

这是屏幕截图的代码,但我猜缺少了一些东西。我认为我使用的关键代码很糟糕,对于 0x70 它发送 F1。对于 0x46,它会发送令人讨厌的 Windows 声音。

    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);
    }

How can I, with windows messages, Hold the ALT button?

Is there a WM_KEYHOLD or anything like that?

This is the code to screen shot but I guess something is missin. I think the key codes im using are bad, For 0x70 it sends F1. and for 0x46 it sends anoyying windows sound.

    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);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

菊凝晚露 2024-11-20 22:32:42

DanielB 引用 lParam 位链接的文档 29 定义ALT状态,你尝试过吗?

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

The Docs linked by DanielB reference to lParam's bit 29 defining ALT status, have you tried that?

Bit 29 - The context code. The value is 1 if the ALT key is down while the key is pressed; it is 0 if the WM_SYSKEYDOWN message is posted to the active window because no window has the keyboard focus.

做个ˇ局外人 2024-11-20 22:32:42

根据我的理解,发送 WM_SYSKEYDOWN / WM_KEYDOWN 应该足够了。请参阅文档

In my understanding, it should be enough to send WM_SYSKEYDOWN / WM_KEYDOWN. see Docs

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文