2012-05-03 129 views
1


我想知道是否可以将句柄转换为窗口“HWND”。我需要使用“FindWindow”方法调用“PostMessage”函数。C++处理HWND?

我现在必须采购

+5

不可以。有一个原因是为了处理句柄和窗口句柄有两种不同的数据类型('HANDLE'和'HWND')。更不用说一个进程可以有多个窗口,所以绝对不是一对一的对应关系。你究竟在做什么? –

+0

我正在试图制作一个“易用”的API来制作“魔兽世界”机器人。我试图找到的HWND窗口是主窗口的HWND。我不知道我是否能够发现:但是;这不是一个大问题,我只是在C++中教育自己。 – dotTutorials

回答

2

使用mainProcess句柄调用GetProcessId()来获取ProcessID。

调用EnumWindows的()

每个窗口,调用GetWindowThreadProcessId()来获取与窗口相关的进程的ProcessID。

比较ProcessID,如果它们匹配 - 你找到了你想要的HWND。

这是一个比较昂贵的任务,所以最好找到你想要的前端并存储它的hwnd。

+1

警告:如前所述 - 一个进程可以有多个窗口,因此您可能需要对窗口(类名,标题等)进行额外的检查以确定它是否是您想要的。 – MessyHack

+0

感谢你们两位,我已经想出了解决这个问题的方法:]。 – dotTutorials

4

第一个进程可以创建多个窗口。由于不存在1对1的映射,所以这样的功能是没有意义的。

另一方面,肯定可以有一个函数返回一个进程创建的窗口列表。