我正在尝试使用函数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);
这首先获取一个名为"Calculator"的窗口的句柄(FindWindow
),然后将该窗口带到前台。
"句柄"是一个通用术语,用于指代标识系统上资源(菜单、DLL模块、内存块等)的令牌。通常被称为"魔法cookie",它通常在您第一次创建资源时返回。然后将该句柄传递给API中负责处理资源的其他函数。然而,您通常不需要知道手柄是什么。有时它可能是一个指针,有时是一个数字,也许是一个结构,或者其他什么。这就是为什么他们使用HWND这样的名称来隐藏它,HWND只是用于识别窗口的句柄(由API函数"CreateWindow()"返回)。因此,您不会将"句柄"转换为HWND,然后再转换回来,因为HWND已经是一个"句柄"(只标识您创建的窗口)。
在此处找到http://forums.codeguru.com/showthread.php?135438-手柄和HWND
您可以使用FindWindow从应用程序获取hwndhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx
这应该允许您获得HWND,前提是您有要查找的C++句柄作为HWND?
HWND也是一个HANDLE,但却是全局的。也就是说,在一个进程的上下文中有效的HWND在另一个进程中也是有效的。
上的一些未记录的信息https://winterdom.com/dev/ui/wnd/.