获取当前活动窗口的线程ID

用户名

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章