获取当前进程的HWND 我有一个C++程序,我使用Window API。我想得到自己进程的HWND。请指导我如何使之成为可能。

获取当前进程的HWND 我有一个C++程序,我使用Window API。我想得到自己进程的HWND。请指导我如何使之成为可能。,c++,c,winapi,windows,C++,C,Winapi,Windows,该函数返回一个引用当前进程的伪句柄。此句柄可用于大多数接受进程句柄参数的Win32 API函数 文档包含有关此伪句柄的更多信息,包括如果需要,如何将其转换为实际句柄。您可以使用句柄WINAPI GetCurrentProcess(void)来自Kernel32.dll 请参阅MSDN条目。如果您谈论的是获取进程句柄,那么它不是HWND(它是windowhandle),而是句柄(即内核对象句柄);要检索与当前进程相关的伪句柄,您可以使用其他方法 另一方面,如果您想获得应用程序主窗口的HWND(窗口

该函数返回一个引用当前进程的伪句柄。此句柄可用于大多数接受进程句柄参数的Win32 API函数


文档包含有关此伪句柄的更多信息,包括如果需要,如何将其转换为实际句柄。

您可以使用
句柄WINAPI GetCurrentProcess(void)来自Kernel32.dll


请参阅MSDN条目。

如果您谈论的是获取进程句柄,那么它不是
HWND
(它是windowhandle),而是
句柄(即内核对象句柄);要检索与当前进程相关的伪句柄,您可以使用其他方法

另一方面,如果您想获得应用程序主窗口的
HWND
(窗口句柄),那么您必须使用并检查现有窗口的所有权,将返回的进程ID与返回的进程ID进行比较。不过,在这种情况下,最好在创建主窗口句柄时将其保存在一个变量中,而不是执行所有这些操作

无论如何,请始终记住,并非所有句柄都是相同的:
HANDLE
s和
HWND
s是完全不同的野兽:第一个是内核句柄(=内核管理对象的句柄),并使用通用内核句柄操纵函数进行操纵(
DuplicateHandle
CloseHandle
,…),而第二个是相对于窗口管理器的句柄,窗口管理器是操作系统的一个完全不同的部分,使用不同的函数集进行操作


实际上,理论上,
HWND
可能与
句柄具有相同的“数字”值,但它们所指的对象完全不同。

您是(错误的)假设一个进程只有一个HWND。这通常是不正确的,因此Windows不能提供API来获取它。一个程序可以创建两个窗口,并因此有两个HWND。哦,如果您的程序只创建一个窗口,它可以将该HWND存储在全局变量中。

我的示例不是处理进程,而是可能你需要这个:

HWND hwndList = GetDlgItem(hwnd, IDCL_COMBOBOX);
这将返回由其
IDCL\u组合框指定的控件的HWND

获取控制台窗口
“返回值是与调用进程关联的控制台使用的窗口句柄,如果没有此类关联的控制台,则返回NULL。”

获取其他窗口
GetActiveWindow()
可能不是答案,但它可能有用
“返回值是附加到调用线程消息队列的活动窗口的句柄。否则,返回值为NULL。”>


但是,图形窗口不仅仅是弹出的-因此您应该从您/您的应用程序创建窗口的位置检索句柄…例如
CreateWindow()
返回
HWND
句柄,所以您只需保存并检索它…

这里是另一个答案:


此->GetSafeHwnd()如果这是你的进程,那么你不是第一个创建窗口的人吗?你应该已经有了句柄。我有句柄,但问题是我的进程中有不同的线程。我想在不同的时间在这些线程中使用该句柄。很抱歉,但仍然不清楚你到底想做什么……你能描述得更好吗这种情况?HWND不是进程句柄。进程可能有零个、一个或多个窗口,每个窗口都有自己的HWND。如果没有更多信息,您的问题就没有意义。进程是否只有一个窗口?从所属线程以外的线程访问窗口句柄会带来麻烦。通常,您应该只er从拥有的线程修改窗口。
GetConsoleWindow();