求助,关于屏幕截图的问题 我写了个程序,用于在服务器上每天截一次屏幕然后自动给我发邮件,这样方便我了解服务器上的情况,可是截的图有问题,如果我远程直接在服务器上操作,不离开服务器画面,是可以截到图,我一旦退出3389远程,程序隔一段时间截的图就会成黑屏,这应该怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以下是我截图部分的代码:procedure snapscreen(a,b,c,d:Integer);var bmpscreen:Tbitmap; jpegscreen:Tjpegimage; FullscreenCanvas:TCanvas; dc:HDC; sourceRect, destRect: TRect;begin try dc:=getdc(0); 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(ExtractFilePath(ParamStr(0))+'tmp.jpg'); FullscreenCanvas.Free; bmpscreen.Free; jpegscreen.Free ; ReleaseDC(0, DC); except end;end;以下是调用:SnapScreen(0,0,Screen.Width,Screen.Height);我的程序是在远程的服务器上运行的,我用3389远程控制,如果我把以上代码放在一个BUTTON里截图是没问题的。可我把这些代码放在一个Timer中,这个Timer10分钟运行一次,这10分钟内,如果我在远程服务器上连接着,是可以正常运行,一旦我关了3389远程,截到的图就是黑的,很是郁闷。PS:服务器没接显示器 桌面->右鍵->屬性->屏幕保護->(無)->確定桌面->右鍵->屬性->屏幕保護->電源->關閉硬盤及系統待機->從不->確定。OK 是的,没错,如果直接在远程服务器上一直进行任何操作,就是保持终端连接的话,那个10分钟截一次图的Timer会正常截到图,一旦退出3389远程终端,截到的图就是黑的 这应该和PC有没有连接显示器是有关系的,getdc返回的是一个设备的句柄,如果你的主机上面没有连接任务显示设备的话,这个返回的结果应该是0,你可以测试一下在你截图的timer里面把getdc(0)的结果写入log里面就可以验证。另外你也可以把Screen.Width,Screen.Height的值记录下来,在没有显示设备的情况它们的值不知道会是怎么样的。 uses Clipbrd; procedure TForm1.Timer1Timer(Sender: TObject); begin keybd_event(VK_SNAPSHOT, 0, 0, 0); keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0); if not ClipBoard.HasFormat(CF_BITMAP) then Exit; Image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BITMAP,ClipBoard.GetAsHandle(CF_BITMAP), 0); image1.Picture.SaveToFile('C:\ABC.bmp');//然后你将这个文件转成jpg,文件小更方便发邮件传输。end; 发邮件的代码不再给出。添加附件的方法是用:TIdAttachment.Create(IdMessage1.MessageParts,'c:\abc.jpg');//假如你已经把abc.bmp转成ABC.jpg了希望你能加分后再结贴,为了你这点分我写了半天。希望能满足你的要求! 请问大家设计模式中的访问者模式与适配器模式有什么区别? 求助:调用外部程序遇到问题! 关于 TreeView1 控件的使用问题-----------在线等待!!!! 关于日期的比较的问题,莱鸟我请教大家了 东进语音卡编程:聊天室。解决问题另加280分!绝不食言!!在线等! 大家都用什么Grid组件的?求助 怎样在程序中动态添加/删除数据库字段?(Delphi) 如何编写该函数?绝对高手来 如何进行“阴历”和“阳历”之间的转换? 50分,小问题,关于外部关键字的处理 IDHTTP的代理问题 delphi2010 突然关闭,代码丢失,有没有办法找回来
procedure snapscreen(a,b,c,d:Integer);
var
bmpscreen:Tbitmap;
jpegscreen:Tjpegimage;
FullscreenCanvas:TCanvas;
dc:HDC;
sourceRect, destRect: TRect;
begin
try
dc:=getdc(0);
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(ExtractFilePath(ParamStr(0))+'tmp.jpg');
FullscreenCanvas.Free;
bmpscreen.Free;
jpegscreen.Free ;
ReleaseDC(0, DC);
except
end;
end;以下是调用:
SnapScreen(0,0,Screen.Width,Screen.Height);我的程序是在远程的服务器上运行的,我用3389远程控制,如果我把以上代码放在一个BUTTON里截图是没问题的。可我把这些代码放在一个Timer中,这个Timer10分钟运行一次,这10分钟内,如果我在远程服务器上连接着,是可以正常运行,一旦我关了3389远程,截到的图就是黑的,很是郁闷。PS:服务器没接显示器
桌面->右鍵->屬性->屏幕保護->電源->關閉硬盤及系統待機->從不->確定。OK
begin
keybd_event(VK_SNAPSHOT, 0, 0, 0);
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);
if not ClipBoard.HasFormat(CF_BITMAP) then Exit;
Image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BITMAP,ClipBoard.GetAsHandle(CF_BITMAP), 0);
image1.Picture.SaveToFile('C:\ABC.bmp');//然后你将这个文件转成jpg,文件小更方便发邮件传输。
end; 发邮件的代码不再给出。添加附件的方法是用:
TIdAttachment.Create(IdMessage1.MessageParts,'c:\abc.jpg');//假如你已经把abc.bmp转成ABC.jpg了希望你能加分后再结贴,为了你这点分我写了半天。希望能满足你的要求!