后台区域截图的问题

Delphi小叮当 2012-10-09 07:34:35
还是区域截图的问题
我的想法是

本地载入一张图片 可以是image控件或者是其他的 然后在后台区域截图

但是怎么才能做到后台区域截图 不是直接在webb里面截图了

用区域截图的函数 用下面的函数 虽然句柄写正确以后 但是 在xp的电脑上 还是截图是屏幕的不是后台的程序的控件的截图

而在vin7的电脑上却可以 求改正代码 个人觉得下面的代码好像只能截图屏幕的截图 而不能后台截图

后没有后台区域截图的函数呢

var
bmpscreen:Tbitmap;
jpegscreen:Tjpegimage;
FullscreenCanvas:TCanvas;
dc:HDC;
sourceRect, destRect: TRect;
begin
try
//dc:=///GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD);
dc:=GetWindowDC(form1.Handle);
//dc:=getdc(getdc(GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD)));
// dc:=getdc(form1.webbrowser1.Handle);
///showmessage(inttostr(dc)) ;
fullscreencanvas:=Tcanvas.Create;
fullscreencanvas.Handle:=dc;
bmpscreen:=Tbitmap.create;
bmpscreen.Width :=c-a;
bmpscreen.Height :=d-b;
sourcerect:=rect(0,0,c-a ,d-b );
destrect:= rect(a,b,c,d);
bmpscreen.Canvas.CopyRect(sourcerect,fullscreenCanvas,destrect);
jpegscreen:=Tjpegimage.Create ;
jpegscreen.Assign (bmpscreen);
jpegscreen.CompressionQuality:=100;
//jpegscreen.SaveToFile(pchar('c:\'+swj));
jpegscreen.SaveToFile(pchar(ExtractFilePath(ParamStr(0))+swj));
FullscreenCanvas.Free;
bmpscreen.Free;
jpegscreen.Free ;
ReleaseDC(0, DC);
except
end;
end;
...全文
425 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码跳动 2012-10-16
  • 打赏
  • 举报
回复
如果用getdc 最小化的窗口不行. 换个思路设置程序窗口坐标为-1000这样的, 让他跑到桌面外面去,截图后,恢复再最小化。
代码跳动 2012-10-16
  • 打赏
  • 举报
回复
这种截图方法后台是不行的。
Delphi小叮当 2012-10-10
  • 打赏
  • 举报
回复
是的 亲 真着急啊 该怎么改代码~~~~[Quote=引用 5 楼 的回复:]

看来你是真急了,这都发仨贴了。。
[/Quote]
hsfzxjy 2012-10-09
  • 打赏
  • 举报
回复
看来你是真急了,这都发仨贴了。。
Delphi小叮当 2012-10-09
  • 打赏
  • 举报
回复
我把句柄改成 form1.handle 也是不行 也是桌面的截图 所以我认为应该是函数的问题 有没有其他的函数 可以是区域截图的?
Delphi小叮当 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

Delphi(Pascal) code

var
DC : HDC;
hWindow , h : THandle;
Canvas : TCanvas;
begin
hWindow := GetWindow(WebBrowser1.Handle , GW_CHILD);
h := GetWindow(hWindow, GW_CHILD);
if h<>0 then hWi……
[/Quote]事实证明 其实不行 不知道是不是我机器 原因 你能帮我测试一下嘛
procedure tform1.snapscreenzd( swj:string ; a,b,c,d:Integer);
var
bmpscreen:Tbitmap;
jpegscreen:Tjpegimage;
FullscreenCanvas:TCanvas;
dc:HDC;
sourceRect, destRect: TRect;
hWindow , h : THandle;
begin
try
//dc:=///GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD);
///dc:=getdc(GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD));
//dc:=getdc(getdc(GetWindow(GetWindow(form1.WebBrowser1.Handle, GW_CHILD), GW_CHILD)));
hWindow := GetWindow(WebBrowser1.Handle , GW_CHILD);
h := GetWindow(hWindow, GW_CHILD);
if h<>0 then hWindow := H;
dc:=getdc(hWindow);
///showmessage(inttostr(dc)) ;
fullscreencanvas:=Tcanvas.Create;
fullscreencanvas.Handle:=dc;
bmpscreen:=Tbitmap.create;
bmpscreen.Width :=c-a;
bmpscreen.Height :=d-b;
sourcerect:=rect(0,0,c-a ,d-b );
destrect:= rect(a,b,c,d);
bmpscreen.Canvas.CopyRect(sourcerect,fullscreenCanvas,destrect);
jpegscreen:=Tjpegimage.Create ;
jpegscreen.Assign (bmpscreen);
jpegscreen.CompressionQuality:=100;
//jpegscreen.SaveToFile(pchar('c:\'+swj));
jpegscreen.SaveToFile(pchar(ExtractFilePath(ParamStr(0))+swj));
FullscreenCanvas.Free;
bmpscreen.Free;
jpegscreen.Free ;
ReleaseDC(hWindow, DC);
except
end;
end;


Delphi小叮当 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

Delphi(Pascal) code

var
DC : HDC;
hWindow , h : THandle;
Canvas : TCanvas;
begin
hWindow := GetWindow(WebBrowser1.Handle , GW_CHILD);
h := GetWindow(hWindow, GW_CHILD);
if h<>0 then hWi……
[/Quote] 保存到本地应该怎么写 我是菜菜~~
蓝色光芒 2012-10-09
  • 打赏
  • 举报
回复

var
DC : HDC;
hWindow , h : THandle;
Canvas : TCanvas;
begin
hWindow := GetWindow(WebBrowser1.Handle , GW_CHILD);
h := GetWindow(hWindow, GW_CHILD);
if h<>0 then hWindow := H;
Canvas := TCanvas.Create;
DC := GetDC(hWindow);
Canvas.Handle := DC;
//使用Canvas作事
Self.Canvas.CopyRect(Rect(0,0,200,200) , Canvas , Rect(50,50,250,250));
//释放
ReleaseDC(hWindow , DC);
Canvas.Free;
end;

个人感觉XP下应该可行,没作试验,楼主自己试验一下,其实就是加了个判断....

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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