取多文档界面的文字

whtech 2005-06-06 10:16:21
我要写一个小程序,监控另外一个工控程序,它的屏幕时刻在显示一些数据,我要实时的抓取到它屏幕上面现实的数据,然后打印出来。原来的工控程序采用多文档的方式,我用spy++只能抓到他的视图窗口的类名,不能显示里面的内容,没有任何该程序的sdk,我应该怎么获取这些数据呢?现在老板催的很急,拜托各位了。
...全文
136 12 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
关注

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧