Zuerst einmal danke für deine Hilfe!
Der Code ist zwar funktionsfähig, hat aber eine Schwäche:
Wenn der primärer Monitor nicht ganz links angeordnet ist, dann können
Left Werte negativ sein.
Dies hat zur folge, dass man nur den Bildbereich vom primären Monitor und alles von da aus gesehen sich rechts befindliche speichert.
Der folgende Code umschifft dieses Problem. Damit sollte wirklich alles was auf den Bildschirmen sichtbar ist, kopiert werden.
Code: Alles auswählen
procedure TForm1.Button1Click(Sender:TObject);
var
ScreenBitmap: Graphics.TBitmap;
ScreenDC: HDC;
begin
ScreenBitmap:=Graphics.TBitmap.Create;
ScreenBitmap.Width:=Screen.DesktopWidth;
ScreenBitmap.Height:=Screen.DesktopHeight;
ScreenDC:=GetDC(GetDesktopWindow);
BitBlt(ScreenBitmap.Canvas.Handle, 0, 0, ScreenBitmap.Width, ScreenBitmap.Height, ScreenDC, Screen.DesktopLeft, Screen.DesktopTop, SRCCOPY);
// Screen.DesktopLeft und Screen.DesktopTop anstatt 0
ReleaseDC(0, ScreenDC);
ScreenBitmap.SaveToFile('TEST-IMAGE'+ExtensionSeparator+ScreenBitmap.GetFileExtensions); // Fehler?
Image1.Picture.Bitmap:=ScreenBitmap; // Bild wird korrekt dargestellt!
ScreenBitmap.Free;
end;
Nun habe ich aber noch das Problem, dass wenn ich die Bitmap speichere, dass dann nur ein schwarzes Bild gespeichert wird.
Das Problem besteht auch dann, wenn ich das Bild aus
Image1 speichere...
Wo liegt da das Problem?