If you're talking about getting a process handle, then it's not an HWND
(which is a window handle), but a HANDLE
(i.e., a kernel object handle); to retrieve a pseudo-handle relative to the current process, you can use GetCurrentProcess
as the others explained.
On the other hand, if you want to obtain an HWND
(a window handle) to the main window of your application, then you have to walk the existing windows with EnumWindows
and to check their ownership with GetWindowThreadProcessId
, comparing the returned process ID with the one returned by GetCurrentProcessId
. Still, in this case you'd better to save your main window handle in a variable when you create it instead of doing all this mess.
Anyhow, keep always in mind that not all handles are the same: HANDLE
s and HWND
s, in particular, are completely different beasts: the first ones are kernel handles (=handles to kernel-managed objects) and are manipulated with generic kernel-handles manipulation functions (DuplicateHandle
, CloseHandle
, ...), while the second ones are handles relative to the window manager, which is a completely different piece of the OS, and are manipulated with a different set of functions.
Actually, in theory an HWND
may have the same "numeric" value of a HANDLE
, but they would refer to completely different objects.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…