Snapshot of desktop

How can I make a snapshot of the desktop with Delphi?
LVL 1
dluediAsked:
Who is Participating?
 
f15iafCommented:
 An application can simulate a press of the PRINTSCREEN key in order to obtain a screen snapshot and save it to the Windows  clipboard. To do this, call  keybd_event  with the  bVk  parameter set to VK_SNAPSHOT, and the  bScan  parameter set to 0 for a  snapshot of the full screen or set  bScan  to 1 for a snapshot of the active window.  



keybd_event          
 
 The  keybd_event  function synthesizes a keystroke. The system can use such a synthesized keystroke to generate a  WM_KEYUP   or  WM_KEYDOWN  message. The keyboard driver's interrupt handler calls the  keybd_event  function.  
 
 VOID keybd_event(
 
      BYTE   bVk ,           // virtual-key code    
     BYTE   bScan ,           // hardware scan code    
     DWORD   dwFlags ,           // flags specifying various function options    
     DWORD   dwExtraInfo             // additional data associated with keystroke    
    );             
   
 
 Parameters
 
 bVk
 
 Specifies a virtual-key code. The code must be a value in the range 1 to 254.  
 
 bScan
 
 Specifies a hardware scan code for the key.  
 
 dwFlags
 
 A set of flag bits that specify various aspects of function operation. An application can use any combination of the following  predefined constant values to set the flags:  
 
  Value           Meaning    
 KEYEVENTF_EXTENDEDKEY           If specified, the scan code was preceded by a prefix byte having the  value 0xE0 (224).    
 KEYEVENTF_KEYUP           If specified, the key is being released. If not specified, the key is  being depressed.    
   
 
 dwExtraInfo
 
 Specifies an additional 32-bit value associated with the key stroke.  
 
   
 
 Return Values
 
 This function has no return value.  
 
 Remarks
 
 Although  keybd_event  passes an OEM-dependent hardware scan code to Windows, applications should not use the scan code.  Windows converts scan codes to virtual-key codes internally and clears the up/down bit in the scan code before passing it to  applications.  
  An application can simulate a press of the PRINTSCREEN key in order to obtain a screen snapshot and save it to the Windows  clipboard. To do this, call  keybd_event  with the  bVk  parameter set to VK_SNAPSHOT, and the  bScan  parameter set to 0 for a  snapshot of the full screen or set  bScan  to 1 for a snapshot of the active window.  
 
 See Also
 
 GetAsyncKeyState ,  GetKeyState ,  MapVirtualKey ,  SetKeyboardState  
 
 
0
 
DrDelphiCommented:
This is getting to be my favorite question! <g>

You could download my TScreenGrab component from www.drdelphi.com OR

procedure TForm1.Button1Click(Sender: TObject);
begin
grabdesktoprect(rect(0,0,Screen.width,Screen.height),'C:\windows\desktop\test.bmp');
end;

function TForm1.GrabDesktopRect(rect: Trect; Fname: string): Boolean;
var tempbmp:Tbitmap;
    tempcanvas:Tcanvas;
begin
    tempbmp:=TBitmap.create;
    with tempbmp do
    begin
      height:=rect.bottom-rect.top;
      width:=rect.right-rect.left;
    end;
    tempcanvas:=TCanvas.create;
    TempCanvas.handle:= GetWindowDc(GetDeskTopwindow);
    tempbmp.Canvas.CopyRect(rect,tempcanvas,rect);
    tempbmp.savetofile(fname);
    tempbmp.Free;
    TempCanvas.free;
end;

end.


Your choice.

Good luck!!

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.