我正在尝试使用函数
HWND和HANDLE之间有什么区别?
SetForegroundWindow(HWND hWnD)
。我有一些句柄,但作为上述函数的参数时它无效。我的句柄是一个线程,我想将其在前台运行。HWND和HANDLE之间有什么区别?
它们只是抽象数据类型。
根据MSDN,HANDLE
和HWND
的定义如下:
HANDLE
是指向对象的句柄。HWND
是窗口句柄。所以,HWND
是一个HANDLE
,但并非所有的HANDLE
都是HWND
。事实上:
typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;
除非你知道自己在做什么,否则你应该只传递HWND
到SetForegroundWindow
。
HWND hWnd = FindWindow(NULL, "Calculator");
SetForegroundWindow(hWnd);
该代码先使用 FindWindow
获取一个标题为 "Calculator" 的窗口句柄,然后将该窗口置于前台。
如果你已经拥有你所寻找的句柄C++ Handle as HWND?,这应该可以让你获取HWND。
void *
转换成 int *
吗?”这要看情况。你的句柄是什么? - timothyqiuSetForegroundWindow
是一个用于操作窗口而非线程的 API。 - timothyqiuHWND也是一个句柄,但是是全局句柄。 也就是说,在一个进程上下文中有效的HWND在另一个进程上下文中同样有效。
一些未记录的信息请参见https://winterdom.com/dev/ui/wnd/。
HWND
是一种句柄(handle)类型,但不是HANDLE
。 - Ben Voigt
STRICT
,那么这些 typedef 会被使用。如果已定义STRICT
,则HWND
不再作为HANDLE
定义,而是作为一种独特且独立的数据类型定义。 - Remy LebeauHWND
与HANDLE
肯定没有关联。HWND
是窗口组件(user32.dll
和相关组件)中数据结构的索引,而HANDLE
是内核中数据结构的索引。 - Ben Voigt