如何抓取带滚动条的窗口内的所有内容?(100分)

  • 主题发起人 主题发起人 ryu
  • 开始时间 开始时间
R

ryu

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,我正在仿照HyperSnap做一个类似的抓图软件。做到现在,还剩几
个问题没有解决,百思不解后,只能求教高手了:
1.如何抓取带滚动条的窗口内的所有内容?也就是如何控制另一个窗口的滚动
条进行滚动,并抓取滚动后的图片,最后拼结起来。
2.如果滚动窗口内是文本的话,如何将这段文本给抓下来?
能给我Delphi的例程最好。
 
一般的带有滚动条的窗体都是继承于TScrollWinControl, 有两个属性你可以使用:
HorzScrollBar, VertScrollBar: TControlScrollBar;

你可以通过这两个ControlScrollBar对象的属性设置来控制或得到滚屏位置:
Increment -- 每次小箭头点击一次移动多少单位
Position -- 滚动了多少
Range -- 滚动的界限
ScrollPos -- 当前滚动位置(只读)
 
不知道你是怎么实现抓图的,如果用screen dc的话,好像不大好做
 
我大体的想法是这样:
首先获取滚动窗口的句柄,再控制该滚动窗口进行滚动操作,然后抓取滚动后
的窗口图片。具体抓图方法,我还没想好,因为如果抓取静态图片的话,可以把屏幕
的即时图片先抓下来,再让用户选取区域就行了。可抓取动态图片,就必须让滚动
窗口进行刷新显示,并且即时的抓取滚动后的窗口。
不知大家有什么高见?
 
你这个程序中有一点我挺迷惑。
滚动条的作用是使有限的窗口内能显示比较多的内容,所以,万一窗口内的内容
有十几个屏幕高的话,你抓的图应如何显示呢?
 
抓文本最容易, api函数GetWindowText
 
huizhang:
Win32 Help: GetWindowText cannot retrieve the text of an edit control in another application.
所以我还是抓不到其他应用程序的滚动窗口的文本呀!?

mjt:
我可以在我的窗口中放一个ScrollBox控件,然后在ScrollBox上放一个Image控件,
大图抓到Image里以后,ScrollBox可以AutoScroll,所以图片大小不是大问题。
 
我考虑了一下,问题的关键是如何对另外的应用程序进行控制,但如何去获取这种
控制权已非我现在能力所及。我隐约记得有一种办法是做一个DLL,然后将它‘注射’
进另一个程序,然后获得控制权,但具体怎么去做,我只能求救于众位高手了!
 
如果要得到其他APP里面的text, 则应该用发送WM_GetText, EM_StreamOut等消息
 
多谢huizhang,用wm_gettext果然是可以的,那后半个问题就基本上解决了,但前
面的那半个问题怎么解决呢?
 
如果要控制其他程序的ScrollBox, 可以使用Scroll Bar Messages:
SBM_ENABLE_ARROWS
SBM_GETPOS
SBM_GETRANGE
SBM_GETSCROLLINFO
SBM_SETPOS
SBM_SETRANGE
SBM_SETRANGEREDRAW
SBM_SETSCROLLINFO
WM_CTLCOLORSCROLLBAR
WM_HSCROLL
WM_VSCROLL
或者用ScrollWindow API function
 
huizhang:
你说的方法我也想到了,我曾做了个小实验试了一下ScrollWindow,对同一
个应用程序里的TRichedit进行控制,有一点小问题,但是是可以做到的。但我怀疑
能否控制另外应用程序的Scrollbox? 实在太忙了,过一阵子我试一下,再和你探讨,
或者你有什么建议可以贴给我。
 
ryu:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于图形图象版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
不可能做到.
除非你每次移动别的app的滚动条之后sleep(300~1000)(或相似的延时代码), 不然无法抓到正
确的图象.
 
Another_eYes:为什么做不到呢?HyperSnap不是就可以吗?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部