1

我正在使用以下代码来截取我的 c# 应用程序中的 ALT+TAB 键序列。

一些相关的片段:

[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);

bool ret = RegisterHotKey(this.Handle, 0, MOD_ALT, 0x09);
Console.WriteLine("return value:" + ret);
Console.WriteLine("lasterror=" + Marshal.GetLastWin32Error());

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_HOTKEY)
        {
            MessageBox.Show("Generic hotkey interception");
            if (m.WParam.ToInt32() == 0)
            {
                MessageBox.Show("ALT+TAB intercepted");
            }
        }
        base.WndProc(ref m);
    }

几乎在第二个片段中,ret 是假的,但是当我用 MOD_SHIFT (0x04) 替换 MOD_ALT (即 0x01) 时,ret 变为真并且热键拦截有效。

我想知道为什么会这样,因为我在网上看到的许多示例都表明它们有效。

4

2 回答 2

1

也许您不能通过0Id 参数?请参阅下面的链接,该链接指定了 IDH_ALTTAB、IDH_NEXT 或 IDH_PREV。那对应什么……我不知道。

http://msdn.microsoft.com/en-us/library/ms997649.aspx#xpvisualstyles_topic3

于 2011-11-03T06:07:49.713 回答
0

以管理员身份运行修复了它。

于 2011-11-04T01:40:10.743 回答