Seite 1 von 1

Kleinprojekt - Screenshots erstellen (Hilfe gesucht)

Verfasst: 06.02.2014 18:03
von goldengel
Hallo zusammen

Ich bin VisualBasic Entwickler. VB6/VB.Net/C# ist meine tägliche Spielwiese. Jedoch absolut Neu in PureBasic. Ich möchte versuchen eine Applikation zu erstellen welche den Bildschirm bzw. bei Multiscreen, den gesamten Bereich aller Bildschirme, als JPG speichert in einen vordefinierten Ordner. Das wäre dann Schritt 1/6 für mein Kleinprojekt. Falls jemand Interesse hat, kann ich auch gegen Bezahlung eines Obolus das Projekt mit jemandem entwickeln lassen.

Meine Frage ist; Kann mir jemand Hinweise geben zu bestehendem Code in PureBasic Screenshots zu erstellen für Multiscreen Scenarien? Erstmal muss er nur auf Windows funktionieren.


Schöne sonnige Grüsse
goldengel

Re: Kleinprojekt - Screenshots erstellen (Hilfe gesucht)

Verfasst: 06.02.2014 20:29
von TroaX
Versuche es mal hiermit: http://www.rsbasic.de/aktualisierung/wi ... stellen.pb

Soweit ich weiß wird durch die Print-Funktion alle Screens mitgeschnitten. Wenn du nachher nur noch einen Screenshot von einem Fenster willst, kannst du die Auflösungen aller Dektops erfassen und diese aus der Grafik rausrechnen.

Informationen über Desktops: http://www.purebasic.com/german/documen ... index.html
Selektieren eines Bildbereiches: http://www.purebasic.com/german/documen ... image.html

Re: Kleinprojekt - Screenshots erstellen (Hilfe gesucht)

Verfasst: 14.02.2014 17:16
von goldengel
Danke für die Antwort. Leider geht das über die Zwischenablage und ist unschön. Die Zwischenablage darf nicht angerührt werden. Gibt es keine saubere Lösung, welche den Bildschirm kopiert anstelle Tasten zu simulieren? Ausserdem wäre ich unsicher, ob das dann wirklich platformunabhängig ist. Weiss das jemand?

Re: Kleinprojekt - Screenshots erstellen (Hilfe gesucht)

Verfasst: 14.02.2014 17:41
von Christian+
Ich fürchte um Screenshots ohne Umweg über die Zwischenablage zu machen musst du auf die APIs der Zielplattformen zugreifen.
Eine einfache und Plattform übergreifende Lösung dazu gibt es meines Wissens nicht.

Für Windows habe ich mal ein Beispiel gemacht wie du mit Hilfe der Win API vom Desktop ein Screenshot machen kannst:

Code: Alles auswählen

Procedure.i GetDesktopScreenshot()
  Protected DesktopHandle.i, Image.i, DestDC.i, SrcDC.i
  Protected DesktopRect.RECT
  GetWindowRect_(GetDesktopWindow_(), @DesktopRect)
  Image = CreateImage(#PB_Any, DesktopRect\Right, DesktopRect\Bottom, 24)
  DestDC = StartDrawing(ImageOutput(Image))
  SrcDC = GetDC_(GetDesktopWindow_())
  BitBlt_(DestDC, 0, 0, ImageWidth(Image), ImageHeight(Image), SrcDC, 0, 0, #SRCCOPY)
  StopDrawing()
  ReleaseDC_(GetDesktopWindow_(), SrcDC)
  ProcedureReturn Image
EndProcedure

; ;Beispiel:
; Define Image.i = GetDesktopScreenshot()
; SaveImage(Image, "Screenshot.bmp")