首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用全局屏幕坐标获取Win32控件的HWND

使用全局屏幕坐标获取Win32控件的HWND
EN

Stack Overflow用户
提问于 2022-10-16 11:07:46
回答 1查看 74关注 0票数 1

背景

我需要为Windows应用程序自动化项目实现一些Spy++-esque功能。为了简单起见,让我们假设我的应用程序A (用C#或C++编写)试图自动化现有的Win32 Application B (不是WPF或OpenGL应用程序)。让我们也假设应用程序B有一个图片框,我想捕捉。在运行时不知道这个图片框在B中的确切大小和位置,因为它是由B动态创建和调整大小的。但是,可以肯定的是,全局屏幕坐标(x, y)将始终在所讨论的图片框中。

问题

我可以使用B在运行时检索[user32.dll] FindWindow的主窗口句柄。但是,B中的图片框有一个在运行时不为我的应用程序(A)所知的HWND。如果我知道图片框‘HWND是在全局屏幕坐标(x, y)下,当B最大化并位于前台时,我能检索它吗?

也就是这样的东西:

当被定位在特定的屏幕坐标上时。

编辑1:

我尝试了@David Heffernan在注释中提出的解决方案(即函数@David Heffernan的用法),但是这样做的效果是而不是

代码语言:javascript
运行
复制
void* window_hwnd = FindWindow(null, "<title of the window>");

SendMessage(window_hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);
ShowWindow(window_hwnd, SW_MAXIMIZE);
SetForegroundWindow(window_hwnd);
SetActiveWindow(window_hwnd);
SetWindowPos(window_hwnd, null, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
RedrawWindow(window_hwnd, null, null, RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);

void* control_hwnd = WindowFromPoint(300, 300);

理论上,这应该给我在(x=300, y=300)位置控制的HWND。但是,control_hwnd具有与window_hwnd相同的值。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74086580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档