程序弹出异常时,如何在本程序中把这个整个屏幕抓下来。 目的:当软件出现了异常时,用户描述得不是很清楚,想让主程序抓取所有的异常整个屏幕,保存成图片文件,这样方便查找异常。用什么方法能把在程序弹出异常框时,就把整个屏幕图面抓下来? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用键盘上的这个键:Print Screen SysRq 就抓下来了,然后粘贴上就行了 procedure GetScreen(FileName: string; Colors: TPixelFormat = pf8bit);{ 获取屏幕保存为文件; 不捕捉鼠标; 颜色数默认为 256 色 }var Bmp: TBitmap; DC: HDC; Canvas: TCanvas; R: TRect;begin Bmp := TBitmap.Create; Canvas := TCanvas.Create; DC := GetWindowDC(0); try Canvas.Handle := DC; R := Rect(0, 0, Screen.Width, Screen.Height); Bmp.Width := R.Right; Bmp.Height := R.Bottom; Bmp.Canvas.CopyRect(R, Canvas, R); finally ReleaseDC(0, DC); end; Canvas.Handle := 0; Canvas.Free; Bmp.PixelFormat := Colors; Bmp.SaveToFile(FileName); Bmp.Free;end; 异常处理里面写截屏函数~ps:我c版的,路过,灌水~ 关键在于,异常窗口弹出来,必须点击OK确定按钮后,程序才会执行下面的代码。如果把异常抓住,那么就不会弹出窗体。例如 执行下面代码时 strtoint('except')程序会跳出异常框,让你点击OK如何写代码把屏幕抓下来。如果在主程序异常写代码。那么异常框就不会弹出来。 如:try.......except//////抓屏代码end; 为什么要拍照呢,拍照无非是为了查看异常发生的情况,可是只要你俘获异常了,里面就有该异常的相关信息阿。就算你能抓取屏幕,也不过是一个messagebox封装了的一个窗口,里面的内容你完全可以得到阿。 写一个Application.OnException处理过程,在里面把异常的消息保存到一个日志文件就可以了。如果你非要拷屏,可以这样:// 启动或者恢复一个拷屏线程,在里面检测顶层窗口是否是异常对话框,是则拷屏Raise;// 休眠或者终止线程注意这种方法对于严重错误弹出的系统模态对话框是无效的。 delphi 访问网上邻居 TWebBrowser中execWB异常 如何动态的从bdgrid中获取字段民 请教Form之间传递参数有什么好方法 yearof()函数是一个tword类型的值怎样才能将其转为string类型的值呢!???? 不知为何数据库的字段名不能超过10位字符. 谁能帮我解决这个query的问题啊。 事务处理问题?高分请教,在线给分! 查詢!難! delphi 的小圖標的 生成.... 用Tquery的recordcount属性判断不出来记录是否为空 请教查询问题,文本操作,在线等!!
就抓下来了,然后粘贴上就行了
{ 获取屏幕保存为文件; 不捕捉鼠标; 颜色数默认为 256 色 }
var
Bmp: TBitmap;
DC: HDC;
Canvas: TCanvas;
R: TRect;
begin
Bmp := TBitmap.Create;
Canvas := TCanvas.Create;
DC := GetWindowDC(0);
try
Canvas.Handle := DC;
R := Rect(0, 0, Screen.Width, Screen.Height);
Bmp.Width := R.Right;
Bmp.Height := R.Bottom;
Bmp.Canvas.CopyRect(R, Canvas, R);
finally
ReleaseDC(0, DC);
end;
Canvas.Handle := 0;
Canvas.Free;
Bmp.PixelFormat := Colors;
Bmp.SaveToFile(FileName);
Bmp.Free;
end;
ps:
我c版的,路过,灌水~
如果把异常抓住,那么就不会弹出窗体。
例如 执行下面代码时
strtoint('except')
程序会跳出异常框,让你点击OK
如何写代码把屏幕抓下来。
如果在主程序异常写代码。那么异常框就不会弹出来。
try
.......
except
//////抓屏代码
end;
就算你能抓取屏幕,也不过是一个messagebox封装了的一个窗口,里面的内容你完全可以得到阿。
如果你非要拷屏,可以这样:
// 启动或者恢复一个拷屏线程,在里面检测顶层窗口是否是异常对话框,是则拷屏
Raise;
// 休眠或者终止线程
注意这种方法对于严重错误弹出的系统模态对话框是无效的。