社区
界面
帖子详情
取多文档界面的文字
whtech
2005-06-06 10:16:21
我要写一个小程序,监控另外一个工控程序,它的屏幕时刻在显示一些数据,我要实时的抓取到它屏幕上面现实的数据,然后打印出来。原来的工控程序采用多文档的方式,我用spy++只能抓到他的视图窗口的类名,不能显示里面的内容,没有任何该程序的sdk,我应该怎么获取这些数据呢?现在老板催的很急,拜托各位了。
...全文
190
12
打赏
收藏
取多文档界面的文字
我要写一个小程序,监控另外一个工控程序,它的屏幕时刻在显示一些数据,我要实时的抓取到它屏幕上面现实的数据,然后打印出来。原来的工控程序采用多文档的方式,我用spy++只能抓到他的视图窗口的类名,不能显示里面的内容,没有任何该程序的sdk,我应该怎么获取这些数据呢?现在老板催的很急,拜托各位了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wxshzf
2005-07-11
打赏
举报
回复
mark
jerry
2005-06-06
打赏
举报
回复
楼上的办法都不能得到完整的窗口内容. 楼主误会我的方法了,我不是让你打印出来,这个消息发送给窗口是请求窗口将内容输出到你提供设备DC上. 其实并不是所有的窗口都会友好地响应这个消息. 而我检查 CView 的源代码, 它恰恰会响应这个消息. 所以你可以通过这个消息来获取视图的内容:
1) 创建一个 元媒体设备:
HDC hdc = GetDC(NULL);
int cxMms = GetDeviceCaps (hdc, HORZSIZE);
int cyMms = GetDeviceCaps (hdc, VERTSIZE);
int cxPix = GetDeviceCaps (hdc, HORZRES);
int cyPix = GetDeviceCaps (hdc, VERTRES);
ReleaseDC(NULL, hdc);
CRect rcImg;
rcImg.left = 0;
rcImg.top = 0;
rcImg.right = (1000) * cxMms * 100 / cxPix; // 指定足够大的尺寸(象素要换算成 HIMETRIC)
rcImg.bottom = (1000) * cyMms * 100 / cyPix; // 指定足够大的尺寸
hdc = CreateEnhMetaFile(NULL, NULL, &rcImg, (LPSTR)NULL);
2) 向指定的窗口发送 WM_PRINT 消息:
::SendMEssage(hView, WM_PRINT, (WPARAM)hdc, (LPARAM(PRF_CLIENT));
3) 分析元文件格式,就可以得到,VIEW的输出内容.
可通过 EnumEnhMetaFile 来实现. 参考:
http://linxixi.8u8.com/win32prog/Contents/Page18.html
4) 关闭 DC, 或者,保存到文件, 或者输出到 什么地方(屏幕, 打印机, 位图...)
DeleteEnhMetaFile(hdc);
whtech
2005-06-06
打赏
举报
回复
万一这个窗口北方到某个应用程序的后面,或者被最小化了,怎么办?并且好像不是用鼠标指,而是把整个窗口内的都取出来,定时移动鼠标?
icelight
2005-06-06
打赏
举报
回复
有一个比较难的办法。
就是HOOK WINDOWS的写TEXT的系统API,然后往你要监视的客户端写一个点,“弄脏”它,WINDOWS会重写该区域,然后你的钩子就能拦截到它上面的文字了。
其实,这也是屏幕取词的思路。
whtech
2005-06-06
打赏
举报
回复
orbit(走了走了) 我enumchildwindow已经遍历到了它的窗口,不用用GetWindowText得到里面的文字,里面是它自己画的文本,我没办法得到,金山词霸可以。
krh2001(边城浪子)不能让他自己打印,因为我需要将它的数据处理后才打印出来,
jerry
2005-06-06
打赏
举报
回复
向找到的窗口发送 WM_PRINT 消息,让它自己将内容打印出来就是了
吹泡泡的小猫
2005-06-06
打赏
举报
回复
先用EnumWindows遍历所有窗口,找到工控程序的主窗口,然后用EnumChildWindows遍历所有子窗口,找到窗口类名是你用spy看到的view 类,然后用GetWindowText得到窗口内的文本
不过,如果窗口内容不是文本对象或是程序自己画的文本就没办法用GetWindowText
whtech
2005-06-06
打赏
举报
回复
自己up
koko1998
2005-06-06
打赏
举报
回复
mark
jerry
2005-06-06
打赏
举报
回复
metafile 是一种特殊格式,不仅仅是图片, 事实上,它是记录的 API 绘图函数的调用和参数, 如果将它用文本格式来描述的话,那就是一系列的绘图指令, 就象下面这样子:
1)DrawText,120,12,"asdfgh",flag; 指令+参数
2)SelectObject, pen, 1,... ;
....
n)BitBlt,0,0,100,123,{位图数据};
...
具体格式我给你的那个连接都说得很清楚了.
象上面这样的指令都可以通过 API 函数枚举出来, 然后就可以判断这些绘图指令和参数了,
比如要提取其中输出的文本, 只要检测那些画文字指令的参数就能得到.
whtech
2005-06-06
打赏
举报
回复
krh2001(边城浪子)
研究你提供的资料好久,看的还是云里雾里,稍微看出的一点名堂是,metafile好像是图像格式的,我需要的是文字,难道还要做OCR?
BruceJiang
2005-06-06
打赏
举报
回复
关注
多
文档
界面
设计精要:QTabWidget系统学习指南
本文深入解析Qt中QTabWidget的机制与工程实践,涵盖动态管理、内存安全、用户体验优化及视觉定制。重点讲解标签页的生命周期管理、防重复打开文件、拖拽排序同步、快捷键设计和高DPI适配,帮助开发者构建高性能、易维护的多
文档
界面
。
QT 多
文档
文本编辑器
本文介绍了一款具备多
文档
管理功能的文本编辑器的设计与实现过程,支持新建、打开、保存等多种基本编辑功能,同时提供了字体设置、颜色选择、对齐方式调整等丰富的文本格式化选项。
解锁WPS
文字
隐藏功能:多
文档
协同工作的艺术与科学
本文聚焦WPS
文字
的多
文档
协同核心能力,涵盖多窗口布局(标准模式与自定义)、实时协作与版本控制、智能
文档
链接、高效快捷键及云
文档
集成。重点解析并排查看、同步滚动、多人修订、历史版本追溯、超链接动态更新等关键技术点,并结合电商与新媒体团队的真实案例,验证其在提升办公效率、降低沟通成本方面的实效性。
Qt5编写一个记事本(多
文档
编辑器)
本文详细介绍了使用Qt5开发一个具备新建、打开、保存、撤销等功能的多
文档
编辑器,包括创建工程、资源文件、
界面
设计,以及关键类和主函数的实现。最后展示了打包发布过程。
高效办公:利用Word宏实现多
文档
批量
文字
替换
本文详细讲解如何通过VBA宏在Microsoft Word中实现多
文档
批量
文字
替换,涵盖开发工具启用、宏创建与代码解析、安全性配置、实战运行及进阶技巧(如多词替换、兼容旧版DOC格式、错误排查),适用于行政、法务、教育等高频处理Word
文档
的岗位,显著提升办公自动化水平。
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章