Если вы говорите о получении дескриптора процесса , то это не HWND
(то есть w i nd ow h andle), но a HANDLE
(т. е. дескриптор объекта ядра); чтобы получить псевдо-дескриптор относительно текущего процесса, вы можете использовать GetCurrentProcess
, как объяснили другие.
С другой стороны, если вы хотите получить HWND
(дескриптор окна ) к главному окну вашего приложения, то вам нужно пройтись по существующим окнам с EnumWindows
и проверить их право собственности с помощью GetWindowThreadProcessId
, сравнивая возвращенный идентификатор процесса с идентификатором, возвращенным GetCurrentProcessId
. Тем не менее, в этом случае вам лучше сохранять дескриптор главного окна в переменной при создании, а не делать весь этот беспорядок.
Во всяком случае, всегда помните, что не все дескрипторы одинаковы: HANDLE
s и HWND
s, в частности, совершенно разные звери: первые - это дескрипторы ядра (= дескрипторы объектов, управляемых ядром) и управляются с помощью общих функций манипулирования дескрипторами ядра (DuplicateHandle
, CloseHandle
, ...), в то время как вторые являются дескрипторами относительно оконного менеджера, который является совершенно другой частью ОС, и управляются с помощью другой набор функций.
На самом деле, теоретически HWND
может иметь то же "числовое" значение, что и HANDLE
, но они будут относиться к совершенно другим объектам.