如何得到整个屏幕的重绘事件以及需要重绘的矩形?(100分)

  • 主题发起人 主题发起人 wqhuo
  • 开始时间 开始时间
W

wqhuo

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个这样的要求,需要获取当前屏幕图像的变化,有什么好的办法?

如果能够得到屏幕的重绘事件以及需要重绘的矩形,该问题可能就已经解决了,
但是如何才能得到?清高手支招 ^_^
 
好像做不到,除非你使message hook,钩住WM_Paint消息
 
我也这么做了,系统的进程,包括文件管理器、IE等都能被勾住,但没法勾住屏幕。

还有没有别的好办法????
 
这有我做的TELNET控件中的PAINT代码,其中 GetUpdateRect 是取
当前窗口需要重画区域的....

procedure TOopsTelnet.WMPaint(var Message: TWMPaint);
var
DC: HDC;
PS: TPaintStruct;
rc, pr: TRect;
OldFont: THandle;
i: integer;
begin
if not GetUpdateRect(WindowHandle, rc, False) then Exit;
DC:=Message.DC;
if DC=0 then DC:=BeginPaint(WindowHandle, PS);
try
OldFont := SelectObject(DC, Font.Handle);
pr:=Rect(TermMargins, TermMargins-FFontSize.cy, TermMargins+FFontSize.cx, TermMargins);
for i:=0 to FRowCount-1 do begin
Inc(pr.Top, FFontSize.cy);
Inc(pr.Bottom, FFontSize.cy);
if (pr.Top>rc.Bottom)or(pr.Bottom<rc.Top) then Continue;
PaintLine(DC, pr, i);
end;
SelectObject(DC, OldFont);
finally
if Message.DC=0 then EndPaint(WindowHandle, PS);
end;
end;
 
to OopsWare:
获取重绘的矩形没有问题,现在的关键是要抓住屏幕的WM_PAINT消息,得到该消息,
然后...
谢谢你的回答,请继续帮我寻求真理...

to delphiwolf:
hook api?
什么意思?如何实现?麻烦你说清楚点。
在下这里先谢过了
 
type
T???? = class(????);
private // 段加入
...
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
// ...
protected
// ...
end;

implementation

procedure T????.WMPaint(var Message: TWMPaint);
begin
... // 你已经捕获到了!加入你的重画代码吧!
end;

end.
 
to OopsWare:
可能是我的问题描述不太清楚,我要的是整个屏幕,而不是某个窗口,屏幕屏幕哇
 
时间关系,向你推荐一本书吧:DELPHI5 API函数开发实例
人民邮电出版社
 
最后一次提前,如果没有高手出现,只好...
 
前面几位已经回答了,去研究一下吧
hook可行。
利用windows的消息机制
 
把分给我吧!
 
接受答案了.
 
后退
顶部