我有一个全屏窗体来阻止所有输入。如何捕获此表单后面的所有桌面的屏幕截图?换句话说,如何在没有出现在屏幕前面的这种形式的情况下拍摄版画?
我正在写一个远程访问软件。 我需要在屏幕上显示技术支持的信息,并在访问期间阻止所有输入,以便分析人员安静地工作 - 例如VNC可以选择关闭监视器,Dameware可以选择阻止输入。
还有另一种方法可以在这个锁定屏幕后远程工作吗?
答案 0 :(得分:0)
虽然我完全符合评论者的意见,但是以全屏形式阻止用户输入并不是一个好主意,这里有一些代码可以帮助您入门。该代码假设屏幕大小为1920 x 1200。
unit Unit152;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm152 = class( TForm )
Timer1: TTimer;
procedure Timer1Timer( Sender: TObject );
procedure FormCreate( Sender: TObject );
private
{ Private declarations }
DesktopBMP: TBitmap;
procedure WMEraseBkgnd( var Message: TWMEraseBkgnd ); message WM_ERASEBKGND;
protected
procedure Paint; override;
public
{ Public declarations }
end;
var
Form152: TForm152;
implementation
{$R *.dfm}
{ TForm152 }
procedure TForm152.FormCreate( Sender: TObject );
begin
DesktopBMP := TBitmap.Create;
DesktopBMP.SetSize( 1920, 1200 );
end;
procedure TForm152.Paint;
begin
inherited;
Canvas.Draw( 0, 0, DesktopBMP );
end;
procedure TForm152.Timer1Timer( Sender: TObject );
begin
// alternatively a simple Invalidate would do here, but then
// all other windows would not redraw
Width := 0;
Height := 0;
Width := 1920;
Height := 1200;
end;
procedure TForm152.WMEraseBkgnd( var Message: TWMEraseBkgnd );
var
DesktopDC: HDC;
DesktopHwnd: Hwnd;
DesktopCanvas: TCanvas;
begin
DesktopHwnd := GetDesktopWindow;
DesktopDC := GetDC( DesktopHwnd );
try
DesktopCanvas := TCanvas.Create;
DesktopCanvas.Handle := DesktopDC;
DesktopBMP.Canvas.CopyRect( Rect( 0, 0, 1919, 1199 ), DesktopCanvas, Rect( 0, 0, 1919, 1199 ) );
finally
DesktopCanvas.Free;
ReleaseDc( DesktopHwnd, DesktopDC );
end;
Message.Result := 1;
inherited;
end;
end.
DFM看起来像这样:
object Form152: TForm152
Left = 2296
Top = 103
BorderStyle = bsNone
Caption = 'Form152'
ClientHeight = 699
ClientWidth = 1289
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
WindowState = wsMaximized
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Timer1: TTimer
Interval = 10
OnTimer = Timer1Timer
Left = 640
Top = 360
end
end