wpf - Hook CTRL+ALT+TAB

标签 wpf keyboard-hook

我制作了一个 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 + TABCTRL + 制表符

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/

相关文章:

wpf - 如何在 AvalonDock 中默认隐藏/切换 DockingPane?

拖放导致的 WPF 内存泄漏

c++ - SetWindowsHookEx 回调函数不适用于 SYSTEM 权限

c# - 使用 SetWindowsHookEx 设置的低级键盘 Hook 停止在 C# 中调用函数

c# - 使用 Dispatcher.Invoke/BeginInvoke 本质上是否提供对一段代码的互斥访问?

wpf - 在 WPF 中显示大文本的最佳方式?

c# - 什么会导致 Windows 取消低级别(全局)键盘 Hook ?

windows - Vista 及更高版本上的系统范围键盘钩子(Hook)

Java - 从文件中输出文本作为键盘模拟

c# - 无法从 DoubleClick 事件切换 TabItem