我制作了一个 WPF 应用程序,并且能够连接一些窗口组合。 ALT+TAB 被 Hook 并且在我的应用程序运行时它什么都不做(如预期的那样)。问题是当我按下 CTRL+ALT+TAB 时,我得到的效果与 ALT+制表符。 你们知道如何钩住这种组合吗?
编辑:
我已经成功 Hook 了ALT+TAB。我确实想 Hook CTRL+ALT+TAB。我试过这个project example实现这一目标。
这里是制作钩子(Hook)的代码:
private static IntPtr KeyboardHookHandler(int nCode, IntPtr wParam,
ref KBHookStruct lParam){
if (nCode == 0)
{
if (((lParam.vkCode == 0x09) && (lParam.flags == 0x20)) || // Alt+Tab
((lParam.vkCode == 0x1B) && (lParam.flags == 0x20)) || // Alt+Esc
((lParam.vkCode == 0x1B) && (lParam.flags == 0x00)) || // Ctrl+Esc
((lParam.vkCode == 0x5B) && (lParam.flags == 0x01)) || // Left Windows Key
((lParam.vkCode == 0x5C) && (lParam.flags == 0x01)) || // Right Windows Key
((lParam.vkCode == 0x73) && (lParam.flags == 0x20)) || // Alt+F4
((lParam.vkCode == 0x20) && (lParam.flags == 0x20))) // Alt+Space
{
return new IntPtr(1);
}
}
return CallNextHookEx(hookPtr, nCode, wParam, ref lParam);}
最佳答案
答案 1
你可以像下面那样尝试它适用于 CTRL + SHIFT + TAB 和 CTRL + 制表符
private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift))
{
MessageBox.Show("CTRL + SHIFT + TAB trapped");
}
if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
MessageBox.Show("CTRL + TAB trapped");
}
}
答案 2
应该看起来像:
((lParam.flags & 33 == 33) && (lParam.flags & 22 == 22))
32 和 22 在这个例子中是任意的。您需要弄清楚 ALT 和 CTRL 的实际值是什么。它们将是 1、2、4 ... 16、32 等,以便它们可以通过“或”运算组合成一个值。
关于wpf - Hook CTRL+ALT+TAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30329171/