Получение HWND текущего процесса

У меня есть процесс в C++, в котором я использую окно API. Я хочу получить HWND собственного процесса. Любезно ведите меня, как я могу позволить.

16
задан Siddiqui 12 April 2010 в 07:22
поделиться

4 ответа

Вы (ошибочно) предполагаете, что процесс имеет только один HWND. Обычно это неверно, и поэтому Windows не может предложить API для его получения. Программа может создать два окна и в результате получить два HWND. OTOH, если ваша программа создает только одно окно, она может сохранить этот HWND в глобальной переменной.

14
ответ дан 30 November 2019 в 16:09
поделиться

Если вы говорите о получении дескриптора процесса , то это не HWND (который является w i nd ow h andle), но HANDLE (то есть дескриптор объекта ядра); чтобы получить псевдодескриптор относительно текущего процесса, вы можете использовать GetCurrentProcess , как объясняли другие.

С другой стороны, если вы хотите получить HWND (дескриптор окна ) для главного окна вашего приложения, то вы должны пройти по существующим окнам с помощью EnumWindows и проверить их принадлежность с помощью GetWindowThreadProcessId , сравнивая возвращенный идентификатор процесса с идентификатором, возвращенным GetCurrentProcessId . Тем не менее, в этом случае вам лучше сохранить дескриптор главного окна в переменной при ее создании, вместо того, чтобы делать всю эту беспорядок.

Так или иначе, всегда помните, что не все дескрипторы одинаковы: HANDLE s и HWND s, в частности, совершенно разные звери: первые - дескрипторы ядра ( = дескрипторы к объектам, управляемым ядром) и управляются с помощью общих функций манипулирования дескрипторами ядра ( DuplicateHandle , CloseHandle , ...), а вторые - дескрипторы относительно окна manager, который представляет собой совершенно другую часть ОС и управляется другим набором функций.

На самом деле, теоретически HWND может иметь такое же «числовое» значение, как HANDLE , но они будут относиться к совершенно разным объектам.

18
ответ дан 30 November 2019 в 16:09
поделиться

Вы можете использовать HANDLE WINAPI GetCurrentProcess (void); из Kernel32.dll.

См. Запись MSDN здесь .

2
ответ дан 30 November 2019 в 16:09
поделиться

Функция GetCurrentProcess() возвращает псевдо-руку, которая ссылается на текущий процесс. Этот хэндл можно использовать в большинстве функций Win32 API, которые принимают параметр хэндла процесса.

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

5
ответ дан 30 November 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: