Windows API中HANDLE和HWND之间的区别?

时间:2013-08-04 06:48:37

标签: winapi hwnd handles

我正在尝试使用函数SetForegroundWindow(HWND hWnD)。我有一些句柄,但它不作为上述功能的参数。我的句柄是一个线程,我想在前台运行它。

HWND和HANDLE之间有什么区别?

3 个答案:

答案 0 :(得分:30)

他们只是abstract data types

根据MSDNHANDLEHWND定义为:

  • HANDLE是对象的handle
  • HWND是窗口的句柄。

因此,HWNDHANDLE,但并非所有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处的一些未记录的信息。