| 
 
 
{---------------------1---------------------}function GetScreenShot: TBitmap;
 var
 Desktop: HDC;
 begin
 Result  := TBitmap.Create;
 Desktop := GetDC(0);
 try
 try
 Result.PixelFormat := pf32bit;
 Result.Width := Screen.Width;
 Result.Height := Screen.Height;
 BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);
 Result.Modified := True;
 finally
 ReleaseDC(0, Desktop);
 end;
 except
 Result.Free;
 Result := nil;
 end;
 end;
 
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 Image1.Picture.Bitmap := GetScreenShot;
 end;
 
 
 {---------------------2---------------------}
 procedure TForm1.Button1Click(Sender: TObject);
 var DCDesk: HDC; // hDC of Desktop
 bmp: TBitmap;
 begin
 {Create a bitmap}
 bmp := TBitmap.Create;
 
 {Set a bitmap sizes}
 bmp.Height := Screen.Height;
 bmp.Width := Screen.Width;
 
 {Get a desktop DC handle - handle of a display device context}
 DCDesk := GetWindowDC(GetDesktopWindow);
 
 {Copy to any canvas, here canvas of an image}
 BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
 DCDesk, 0, 0, SRCCOPY);
 
 {Save the bitmap}
 bmp.SaveToFile('ScreenShot.bmp');
 
 {Release desktop DC handle}
 ReleaseDC(GetDesktopWindow, DCDesk);
 
 {Release a bitmap}
 bmp.Free;
 end;
 
 {---------------------3---------------------}
 {
 If you will try to capture the screen to bitmap using BitBlt function
 and have a layered (transparent)  window visible,
 you will get only a picture of the screen without this window.
 To fix it we have to use the new raster-operation code for BitBlt
 function CAPTUREBLT that introduced in Windows 2000 for including
 any windows that are layered on top of your window in the resulting image.
 }
 
 procedure CaptureScreen(AFileName: string);
 const
 CAPTUREBLT = $40000000;
 var
 hdcScreen: HDC;
 hdcCompatible: HDC;
 bmp: TBitmap;
 hbmScreen: HBITMAP;
 begin
 // Create a normal DC and a memory DC for the entire screen. The
 // normal DC provides a "snapshot" of the screen contents. The
 // memory DC keeps a copy of this "snapshot" in the associated
 // bitmap.
 
 hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
 hdcCompatible := CreateCompatibleDC(hdcScreen);
 // Create a compatible bitmap for hdcScreen.
 
 hbmScreen := CreateCompatibleBitmap(hdcScreen,
 GetDeviceCaps(hdcScreen, HORZRES),
 GetDeviceCaps(hdcScreen, VERTRES));
 
 // Select the bitmaps into the compatible DC.
 SelectObject(hdcCompatible, hbmScreen);
 bmp := TBitmap.Create;
 bmp.Handle := hbmScreen;
 BitBlt(hdcCompatible,
 0, 0,
 bmp.Width, bmp.Height,
 hdcScreen,
 0, 0,
 SRCCOPY or CAPTUREBLT);
 
 bmp.SaveToFile(AFileName);
 bmp.Free;
 DeleteDC(hdcScreen);
 DeleteDC(hdcCompatible);
 end;
 
 
   
   
    | 
         
          | Bewerten Sie diesen Tipp: |  |  |