我正在尝试使用函数SetForegroundWindow(HWND hWnD)
。我有一些句柄,但它不作为上述功能的参数。我的句柄是一个线程,我想在前台运行它。
HWND和HANDLE之间有什么区别?
答案 0 :(得分:30)
他们只是abstract data types。
根据MSDN,HANDLE
和HWND
定义为:
HANDLE
是对象的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”的窗口的句柄,然后将该窗口置于前台。
答案 1 :(得分:10)
“句柄”是用于表示标识系统上的资源的令牌(菜单,DLL模块,内存块等)的通用术语。通常被称为“魔术cookie”,它通常在您第一次创建资源时返回。然后,将该句柄传递给负责处理资源的API中的其他函数。你通常不需要知道手柄是什么。有时它可能是指针,有时可能是数字,也许是结构,或者其他什么。这就是为什么他们使用像HWND这样的名称来隐藏它,这只是用于识别窗口的句柄(由API函数“CreateWindow()”返回)。因此,您不会将“句柄”转换为HWND并再次返回,因为HWND已经是“句柄”(仅用于标识您创建的窗口)。
在此处找到http://forums.codeguru.com/showthread.php?135438-Handle-and-HWND
您可以使用FindWindow从应用程序http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx
获取hwnd这应该允许你获得HWND,只要你掌握了你正在寻找的东西C++ Handle as HWND?
答案 2 :(得分:6)
HWND也是一个手柄,但是全球手柄。 即在一个进程的上下文中有效的HWND在另一个进程的上下文中也是有效的。
http://forum.sysinternals.com/internal-wnd-structure-in-win7_topic24988.html处的一些未记录的信息。