Получить идентификатор потока текущего активного окна - PullRequest
1 голос
/ 13 апреля 2019

Мне нужно получить идентификатор потока активного окна.Есть ли функция 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 раскладка клавиатуры будет неправильной (такой же), если пользователь изменит раскладку клавиатуры во время выполнения программы.Передача идентификатора потока активного окна - путь.

1 Ответ

2 голосов
/ 13 апреля 2019

Вы можете получить идентификатор потока, который создал активного окна, хотя, конечно, могут быть другие потоки, так или иначе связанные с ним с момента его создания.

Если это то, что вы 'повторно используйте <a href="https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getwindowthreadprocessid" rel="nofollow noreferrer">GetWindowThreadProcessId</a>(<a href="https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getforegroundwindow" rel="nofollow noreferrer">GetForegroundWindow()</a>, nullptr);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...