C# 获取Metro应用程序';键盘挂钩的线程ID

C# 获取Metro应用程序';键盘挂钩的线程ID,c#,wpf,windows-store-apps,keyboard-hook,setwindowshookex,C#,Wpf,Windows Store Apps,Keyboard Hook,Setwindowshookex,我正在尝试从一个经典的控制台应用程序在Metro应用程序上设置一个低级键盘挂钩。 我的问题是metro应用程序不能与全局挂钩。 所以我试着将钩子连接到特定的线上,但我没有找到它 现在,这就是我所拥有的: private IntPtr SetHook(LowLevelKeyboardProc proc, ProcessModule tabModule) { Debug.WriteLine("INFO HOOK : Setting hook " + tabModule

我正在尝试从一个经典的控制台应用程序在Metro应用程序上设置一个低级键盘挂钩。 我的问题是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应用商店应用程序的键盘输入


谢谢

使用
WH_-KEYBOARD\u LL
而不是
WH_-KEYBOARD
,并且,您可以为所有进程(包括另一个商店应用程序)挂接键盘。

感谢您的回答,但不,当我将其设置为WH_-KEYBOARD\u LL时,挂接不会捕捉metro应用程序的输入。MSDN中记录了这一点:“Windows应用商店应用程序开发如果dwThreadId为零,则Windows应用商店应用程序进程和Windows运行时代理进程的窗口挂钩DLL不会在进程中加载,除非它们是由UIAccess进程(辅助工具)安装的。”。通知将在安装程序的线程上为这些挂钩传递:”