我需要获取活动窗口的线程ID。是否有Windows API函数可以让我获取此信息?
有GetCurrentThreadId
功能,但是它返回调用线程的ID ,而不是活动窗口线程的ID ,因此对于此目的没有用。
编辑:
如建议编辑我的问题以提供有关为什么我需要它的更多信息,这里是:
我正在实现一个LowLevelKeyboardProc来捕获键盘输入,并且由于键盘布局可能因程序而异,所以我想确保为处理键盘的活动窗口获取布局:
代码段:
HWND active_window = GetForegroundWindow();
DWORD thread_id = GetWindowThreadProcessId(active_window, nullptr);
HKL hLayout = GetKeyboardLayout(thread_id);
现在具有活动窗口的正确键盘布局,我可以翻译键:
BYTE pKeyState[256];
GetKeyboardState(pKeyState)
wchar_t result;
PKBDLLHOOKSTRUCT pKbd = reinterpret_cast<PKBDLLHOOKSTRUCT>(lParam);
ToUnicodeEx(pKbd->vkCode, pKbd->scanCode, pKeyState, &result, 1, 2, hLayout);
提供的答案适合我的需要,因为如果将零传递给GetKeyboardLayout
功能,则如果用户在程序执行期间更改键盘布局,键盘布局将是错误的(相同的)。传递活动的窗口线程ID是方法。
您可以获取创建活动窗口的线程的ID ,尽管自创建以来可能还会涉及其他线程。
如果那是您想要的,请使用 GetWindowThreadProcessId(GetForegroundWindow(), nullptr);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句