Tha*_*gnv 19 winapi handles hwnd
我正在尝试使用功能SetForegroundWindow(HWND hWnD).我有一些句柄,但它不作为上述功能的参数.我的句柄是一个线程,我想在前台运行它.
HWND和HANDLE之间有什么区别?
tim*_*qiu 34
它们只是抽象的数据类型.
根据MSDN,HANDLE并HWND定义为:
HANDLE是对象的句柄.HWND 是一个窗口的句柄.所以,一个HWND是一个HANDLE,但不是所有的HANDLEs为HWND.事实上:
typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;
Run Code Online (Sandbox Code Playgroud)
你应该只传递HWND给SetForegroundWindow你,除非你知道你在做什么.
HWND hWnd = FindWindow(NULL, "Calculator");
SetForegroundWindow(hWnd);
Run Code Online (Sandbox Code Playgroud)
首先获取一个标题为"Calculator"的窗口的句柄FindWindow,然后将该窗口置于前台.
Spe*_*cer 11
"句柄"是用于表示标识系统上的资源的令牌(菜单,DLL模块,内存块等)的通用术语.通常被称为"魔术cookie",它通常在您第一次创建资源时返回.然后,将该句柄传递给负责处理资源的API中的其他函数.你通常不需要知道手柄是什么.有时它可能是指针,有时可能是数字,也许是结构,或者其他什么.这就是为什么他们使用像HWND这样的名称来隐藏它,这只是用于识别窗口的句柄(由API函数"CreateWindow()"返回).因此,您不会将"句柄"转换为HWND并再次返回,因为HWND已经是"句柄"(仅用于标识您创建的窗口).
在这里找到http://forums.codeguru.com/showthread.php?135438-Handle-and-HWND
您可以使用FindWindow从应用程序获取hwnd http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx
这应该允许你获得HWND,只要你有把握你正在寻找的C++句柄作为HWND?
HWND也是一个手柄,但是全球手柄.即在一个进程的上下文中有效的HWND在另一个进程的上下文中也是有效的.
http://forum.sysinternals.com/internal-wnd-structure-in-win7_topic24988.html上的一些未记录的信息.