C # p / invoke to RegisterHotKey для комбинации клавиш ALT + TAB не работает (возвращает 0) - PullRequest
1 голос
/ 03 ноября 2011

Я использую следующий код для перехвата последовательности клавиш ALT + TAB в моем приложении c #.

Некоторые соответствующие фрагменты:

[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 равен false, но когда я заменяю MOD_ALT (0x01) на MOD_SHIFT (0x04), ret становится true и перехват горячих клавиш работает.

Мне было интересно, почему это так, потому что многие примеры, которые я видел в сети, указывают, что они работают.

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Возможно, вы не можете передать 0 для параметра Id?См. Ссылку ниже, в которой указаны IDH_ALTTAB, IDH_NEXT или IDH_PREV.Что это соответствует ... я не знаю.

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

0 голосов
/ 04 ноября 2011

Запуск с правами администратора.

...