Я использую следующий код для перехвата последовательности клавиш 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 и перехват горячих клавиш работает.
Мне было интересно, почему это так, потому что многие примеры, которые я видел в сети, указывают, что они работают.