获取 Metro 应用的键盘挂钩的线程 ID

本文关键字:线程 ID 键盘 Metro 应用 获取 | 更新日期: 2023-09-27 18:34:46

我正在尝试从经典控制台应用程序在 Metro 应用程序上设置低级键盘挂钩。我的问题是地铁应用程序无法与全局钩子挂钩。所以我试图将钩子连接到特定的线程,但我找不到它。

现在这就是我所拥有的:

    private IntPtr SetHook(LowLevelKeyboardProc proc, ProcessModule tabModule)
    {
        Debug.WriteLine("INFO HOOK : Setting hook " + tabModule.ModuleName.ToString());
        var result = SetWindowsHookEx(WH_KEYBOARD, proc, GetModuleHandle(tabModule.ModuleName), 0);
        Debug.WriteLine("INFO BACK : Hook handle = " + result);
        return result;
    }

问题是在 SetWindowsHookEx 函数中,0 表示全局钩子,我应该用线程 ID 替换它。当我尝试通过以下方式获取线程 ID 时:

    ProcessThreadCollection threadList = processList[0].Threads;
    Debug.WriteLine("Threads = " + threadList.Count);
    foreach (ProcessThread thread in threadList)
        Debug.WriteLine("Thread = " + thread.Id);

我通过(当然(列表获得了 40 个线程的计数。

我的问题是:我可以使用什么线程作为 SetWindowsHookEx 最后一个参数来挂接来自 Windows 应用商店应用程序的键盘输入。

谢谢!

获取 Metro 应用的键盘挂钩的线程 ID

使用WH_KEYBOARD_LL而不是WH_KEYBOARD和LowLevelKeyboardProc,您可以为所有进程挂钩键盘,包括另一个商店应用程序。