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;这不是错误,但我无法检查它是否运行。@Thangnvsetforegroundindow
是一个用于操作窗口的API,而不是线程。只有在未定义STRICT
时才使用这些typedef。如果是,则HWND
不再定义为句柄
,而是定义为一种唯一且独立的数据类型。@RemyLebeau引用了typedef
部分。(但我检查了标题,这是按照您描述的方式定义的。谢谢。)HWND
当然与HANDLE
无关,即使它们碰巧使用相同的指针大小类型编译HWND
是窗口组件(user32.dll
和friends)中数据结构的索引,HANDLE
是内核中数据结构的索引。“但全局索引”正是我想要的。Thx mate.该链接现在已失效。编辑-谢谢@Rokit.AnHWND
是一种句柄,但不是handle
@BenVoigt这两种类型都是指向指针的typedef,因此在C++或OS级别上它们是相等的。