У меня есть процесс в C++, в котором я использую окно API. Я хочу получить HWND собственного процесса. Любезно ведите меня, как я могу позволить.
Вы (ошибочно) предполагаете, что процесс имеет только один HWND. Обычно это неверно, и поэтому Windows не может предложить API для его получения. Программа может создать два окна и в результате получить два HWND. OTOH, если ваша программа создает только одно окно, она может сохранить этот HWND в глобальной переменной.
Если вы говорите о получении дескриптора процесса , то это не HWND
(который является w i nd ow h andle), но HANDLE
(то есть дескриптор объекта ядра); чтобы получить псевдодескриптор относительно текущего процесса, вы можете использовать GetCurrentProcess
, как объясняли другие.
С другой стороны, если вы хотите получить HWND
(дескриптор окна ) для главного окна вашего приложения, то вы должны пройти по существующим окнам с помощью EnumWindows
и проверить их принадлежность с помощью GetWindowThreadProcessId
, сравнивая возвращенный идентификатор процесса с идентификатором, возвращенным GetCurrentProcessId
. Тем не менее, в этом случае вам лучше сохранить дескриптор главного окна в переменной при ее создании, вместо того, чтобы делать всю эту беспорядок.
Так или иначе, всегда помните, что не все дескрипторы одинаковы: HANDLE
s и HWND
s, в частности, совершенно разные звери: первые - дескрипторы ядра ( = дескрипторы к объектам, управляемым ядром) и управляются с помощью общих функций манипулирования дескрипторами ядра ( DuplicateHandle
, CloseHandle
, ...), а вторые - дескрипторы относительно окна manager, который представляет собой совершенно другую часть ОС и управляется другим набором функций.
На самом деле, теоретически HWND
может иметь такое же «числовое» значение, как HANDLE
, но они будут относиться к совершенно разным объектам.
Вы можете использовать HANDLE WINAPI GetCurrentProcess (void);
из Kernel32.dll.
См. Запись MSDN здесь .
Функция GetCurrentProcess()
возвращает псевдо-руку, которая ссылается на текущий процесс. Этот хэндл можно использовать в большинстве функций Win32 API, которые принимают параметр хэндла процесса.
В документации содержится более подробная информация об этом псевдо-рукоятке, включая то, как преобразовать его в настоящий рукоятку, если это необходимо.