【发布时间】:2016-02-16 16:23:25
【问题描述】:
我正在尝试通过经典控制台应用程序在 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 应用商店应用程序的键盘输入。
谢谢!
【问题讨论】:
标签: c# wpf windows-store-apps keyboard-hook setwindowshookex