I'm trying to use function SetForegroundWindow(HWND hWnD)
. I have some handles but it's not working as parameter of above function. My handle is a thread and I want to run it in foreground.
What are the differences between a HWND and a HANDLE?
I'm trying to use function SetForegroundWindow(HWND hWnD)
. I have some handles but it's not working as parameter of above function. My handle is a thread and I want to run it in foreground.
What are the differences between a HWND and a HANDLE?
They are just abstract data types.
According to MSDN, HANDLE
and HWND
are defined as:
HANDLE
is a handle to an object.HWND
is a handle to a window.So, a HWND
is a HANDLE
, but not all HANDLE
s are HWND
. In fact:
typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;
You should only pass HWND
to SetForegroundWindow
unless you know what you are doing.
HWND hWnd = FindWindow(NULL, "Calculator");
SetForegroundWindow(hWnd);
This first gets the handle to a window titled "Calculator" with FindWindow
and then brings that window to foreground.
typedef
part was quoted from the offical document. (But I checked the header, that is defined the way you described. Thanks.) –
Foozle HWND
is certainly unrelated to HANDLE
even if they happen to compile using the same pointer-sized type. HWND
is an index into a data structure in the windowing component (user32.dll
and friends), HANDLE
is an index into data structures in the kernel. –
Lasonde A "handle" is the general term used to refer to a token that identifies a resource on the system (a menu, a DLL module, a block of memory, etc). Often referred to as a "magic cookie", it's normally returned when you first create the resource. You then pass that handle to other functions in the API responsible for processing the resource. You normally need not know what the handle is however. Sometimes it may be a pointer, other times a number, perhaps a structure, or whatever. That's why they hide it using names like HWND which is simply the handle used to identify a window (returned by the API function "CreateWindow()"). You therefore don't convert a "handle" to an HWND and back again since an HWND is already a "handle" (one that merely identifies windows you create).
Found here http://forums.codeguru.com/showthread.php?135438-Handle-and-HWND
You can use FindWindow to get the hwnd from an application http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx
This should allow you to get the HWND provided you have the handle to what you're looking for C++ Handle as HWND?
void *
to int *
?" It depends. What's your handle? –
Foozle SetForegroundWindow
is an API to manipulate window, not thread. –
Foozle The HWND is also a HANDLE, but a global one. I.e. a HWND valid in the context of one process is also valid in the context of another process.
Some undocumented info at https://winterdom.com/dev/ui/wnd/.
HWND
is a sort of handle, but not a HANDLE
. –
Lasonde © 2022 - 2024 — McMap. All rights reserved.
STRICT
is not defined. If it is, anHWND
is not defined as aHANDLE
anymore, but as a unique and independent data type. – Aulos