Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting HWND of current Process

Tags:

I have a process in c++ in which I am using window API. I want to get the HWND of own process. Kindly guide me how can I make it possible.

like image 838
Siddiqui Avatar asked Apr 12 '10 07:04

Siddiqui


People also ask

How do I get Hwnd from process handle?

You can use EnumWindows and GetWindowThreadProcessId() functions as mentioned in this MSDN article.

How do I get a current window handle?

Remarks. To get the handle to the foreground window, you can use GetForegroundWindow. To get the window handle to the active window in the message queue for another thread, use GetGUIThreadInfo.

How do I fetch the windows ID of the current focused window?

Call GetForegroundWindow to get the handle of the focused window, and then call GetWindowThreadProcessId to get the ID of the process that created that window.


2 Answers

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: HANDLEs and HWNDs, 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.

like image 151
Matteo Italia Avatar answered Sep 17 '22 15:09

Matteo Italia


You are (incorrectly) assuming that a process has only a single HWND. This is not generally true, and therefore Windows can't offer an API to get it. A program could create two windows, and have two HWNDs as a result. OTOH, if your program creates only a single window, it can store that HWND in a global variable.

like image 28
MSalters Avatar answered Sep 19 '22 15:09

MSalters