Мне нужно получить идентификатор потока активного окна.Есть ли функция Windows API, которая позволит мне получить эту информацию?
Есть функция GetCurrentThreadId
, но она возвращает идентификатор для вызывающего потока , а не активного потока окна,так что это бесполезно для этой цели.
РЕДАКТИРОВАТЬ:
Как предложено отредактировать мой вопрос, чтобы предоставить дополнительную информацию о том, зачем мне это нужно, вот оно:
Я реализую 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
раскладка клавиатуры будет неправильной (такой же), если пользователь изменит раскладку клавиатуры во время выполнения программы.Передача идентификатора потока активного окна - путь.