想请教一下,按下这个键后,WINDOWS都做了哪些操作,图源是哪? 和普通的GDI截图有什么不同?  谢谢!!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      DC, Data: THandle;
      Pal: HPALETTE;
      Canvas: TCanvas;
      Bitmap: TBitmap;
      r: TRect;
      Fmt: Word;
    begin
      DC := GetDC(0); // 关键在这里吧,0 代表的是屏幕 Hwnd, 此外还可以是任何的 Hwnd, GetDesktopWindow()是桌面Hwnd
      try
        Canvas := TCanvas.Create;
        Bitmap := TBitmap.Create;
        try
          Canvas.Handle := DC;
          r := Screen.DesktopRect;
          Bitmap.Width := r.Right;
          Bitmap.Height := r.Bottom;
          Bitmap.Canvas.CopyRect(r, Canvas, r);
          Bitmap.SaveToClipboardFormat(Fmt, Data, Pal);
          Clipboard.SetAsHandle(Fmt, Data);
        finally
          Bitmap.Free;
          Canvas.Free;
        end;
      finally
        ReleaseDC(0, DC);
      end;
    end;