Winapi Windows API中句柄和HWND之间的区别?

Winapi Windows API中句柄和HWND之间的区别?,winapi,hwnd,handles,Winapi,Hwnd,Handles,我正在尝试使用函数setforegroundindow(HWND-HWND)。我有一些句柄,但它不是上述函数的参数。我的手柄是一条线,我想在前台运行它 HWND和句柄之间有什么区别?句柄是一个通用术语,用于指标识系统上资源(菜单、DLL模块、内存块等)的令牌。通常被称为“魔法cookie”,它通常在您第一次创建资源时返回。然后将该句柄传递给API中负责处理资源的其他函数。但是,您通常不需要知道句柄是什么。有时它可能是一个指针,有时是一个数字,也许是一个结构,或者其他什么。这就是为什么他们使用HW

我正在尝试使用函数
setforegroundindow(HWND-HWND)
。我有一些句柄,但它不是上述函数的参数。我的手柄是一条线,我想在前台运行它

HWND和句柄之间有什么区别?

句柄是一个通用术语,用于指标识系统上资源(菜单、DLL模块、内存块等)的令牌。通常被称为“魔法cookie”,它通常在您第一次创建资源时返回。然后将该句柄传递给API中负责处理资源的其他函数。但是,您通常不需要知道句柄是什么。有时它可能是一个指针,有时是一个数字,也许是一个结构,或者其他什么。这就是为什么他们使用HWND这样的名称来隐藏它,HWND只是用来标识窗口的句柄(由API函数“CreateWindow()”返回)。因此,您不会将“句柄”转换为HWND并再次转换,因为HWND已经是“句柄”(仅标识您创建的窗口的句柄)

在这里找到

您可以使用FindWindow从应用程序获取hwnd

这将允许您获得HWND,前提是您能够处理您要查找的内容

它们只是

根据HANDLE和
HWND
的定义如下:

  • 句柄
    是对象的
  • HWND
    是窗口的句柄
因此,一个
HWND
是一个
HANDLE
,但并非所有
HANDLE
都是
HWND
。事实上:

typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;
例子 除非您知道自己在做什么,否则只能将
HWND
传递到
setforegroundindow

HWND hWnd = FindWindow(NULL, "Calculator");
SetForegroundWindow(hWnd);

这首先使用
FindWindow
获取标题为“Calculator”的窗口的句柄,然后将该窗口带到前台。

HWND也是一个句柄,但是全局句柄。 即,在一个流程的上下文中有效的HWND也在另一个流程的上下文中有效


一些未记录的信息位于。

是的,tks!,但我可以从handle转换为hwnd吗?@Thangnv这就像是在问“我可以从
void*
转换为
int*
?”这取决于具体情况。你的句柄是什么?我的句柄是一个线程,我想在前台运行它,但它不是函数setForeGroundIndow(HWND HWND)中的HWND;这不是错误,但我无法检查它是否运行。@Thangnv
setforegroundindow
是一个用于操作窗口的API,而不是线程。只有在未定义
STRICT
时才使用这些typedef。如果是,则
HWND
不再定义为
句柄
,而是定义为一种唯一且独立的数据类型。@RemyLebeau引用了
typedef
部分。(但我检查了标题,这是按照您描述的方式定义的。谢谢。)
HWND
当然与
HANDLE
无关,即使它们碰巧使用相同的指针大小类型编译
HWND
是窗口组件(
user32.dll
和friends)中数据结构的索引,
HANDLE
是内核中数据结构的索引。“但全局索引”正是我想要的。Thx mate.该链接现在已失效。编辑-谢谢@Rokit.An
HWND
是一种句柄,但不是
handle
@BenVoigt这两种类型都是指向指针的typedef,因此在C++或OS级别上它们是相等的。