gpt4 book ai didi

winapi - 给定 HWND,如何从所有者绘制的窗口中提取文本信息?

转载 作者:行者123 更新时间:2023-12-04 06:45:52 27 4
gpt4 key购买 nike

我正在为 Win32 编写一个简单的自动化测试应用程序。它作为一个单独的进程运行,并通过 Windows API 访问目标应用程序。我可以阅读窗口层次结构,查找标签和文本框,并通过发送/发布消息等来单击按钮。一切都很好。

不幸的是,目标应用程序中的许多控件仅由所有者绘制的控件/窗口组成。 (例如,我们使用 BCG 菜单和控制栏)。找到控件的正确部分来发送“点击”是有问题的。

给定 HWND,有没有办法提取 GDI 绘图命令? 我想知道绘制到该控件的每段文本及其坐标。

如果失败,有没有办法将单个控件/窗口(再次通过 HWND)捕获到位图中? 更糟糕的情况,我可以对它进行 OCR。

最佳答案

将窗口捕获为位图:

RECT rc;
GetClientRect(hWnd, &rc);
int cx = rc.right-rc.left;
int cy = rc.bottom-rc.top;

HDC winDC = ::GetDC(hWnd);
HDC tempDC = ::CreateCompatibleDC(winDC);
HBITMAP newBMP = ::CreateCompatibleBitmap(winDC, cx, cy);

HBITMAP oldBmp = (HBITMAP)::SelectObject(tempDC, newBMP);
BitBlt(tempDC,0,0,cx,cy, winDC,0,0,SRCCOPY|CAPTUREBLT);
// now you have the window content in the newBMP bitmap, do with it as you please here

::SelectObject(tempDC, oldBmp);
::DeleteObject(newBMP);
::DeleteDC(tempDC);
::ReleaseDC(hWnd, winDC);

关于winapi - 给定 HWND,如何从所有者绘制的窗口中提取文本信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3778562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com