gpt4 book ai didi

windows - 获取当前事件窗口的线程 ID

转载 作者:可可西里 更新时间:2023-11-01 11:42:13 28 4
gpt4 key购买 nike

我需要获取事件窗口的线程ID。是否有 Windows API 函数可以让我获取此信息?

GetCurrentThreadId 函数,但它会返回 调用 线程的 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,当然,自创建以来可能还有其他线程以某种方式参与其中。

如果这就是您想要的,请使用 <a href="https://learn.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getwindowthreadprocessid" rel="noreferrer noopener nofollow">GetWindowThreadProcessId</a>(<a href="https://learn.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getforegroundwindow" rel="noreferrer noopener nofollow">GetForegroundWindow()</a>, nullptr);

关于windows - 获取当前事件窗口的线程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55664389/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com