我需要获取活动窗口的线程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);
所提供的答案符合我的需要,因为如果将0传递给
GetKeyboardLayout
函数,则如果用户在程序执行期间更改键盘布局,则键盘布局将错误(相同)。传递活动窗口线程id是一种方法。
最佳答案
您可以获取创建活动窗口的线程的id,当然,自创建活动窗口以来,可能会有其他线程以某种方式与之相关。
如果这就是你想要的,使用GetWindowThreadProcessId(GetForegroundWindow(), nullptr);
关于windows - 获取当前事件窗口的线程ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55664389/