使用Windows消息按住Alt键

时间:2011-06-07 14:03:29

标签: c# winforms key windows-messages keyhook

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

2 个答案:

答案 0 :(得分:0)

根据我的理解,发送WM_SYSKEYDOWN / WM_KEYDOWN就足够了。见Docs

答案 1 :(得分:0)

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

  

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