获取Metro App的keyboardHook线程ID

时间:2016-02-16 16:23:25

标签: c# wpf windows-store-apps keyboard-hook setwindowshookex

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

谢谢!

1 个答案:

答案 0 :(得分:0)

使用WH_KEYBOARD_LL代替WH_KEYBOARDLowLevelKeyboardProc,您可以为所有进程(包括其他商店应用)挂钩键盘。