我需要获取活动窗口的线程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/

10-11 15:15
查看更多