Screenshot wird nicht erstellt ?

Anfängerfragen zum Programmieren mit PureBasic.
pureanfänger
Beiträge: 74
Registriert: 29.03.2008 15:22

Screenshot wird nicht erstellt ?

Beitrag von pureanfänger »

Also ich habe folgendes Problem. Mein Programm soll auf Tastendruck ein Screenshot vom aktuellen Desktop erstellen. Ich habe bisher folgende Api-Funktion verwendet:

keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
Delay(100)
GetClipboardImage(#Image_0)
UseJPEGImageEncoder()
Save_Picture = SaveImage(#Image_0, "Screenshot.jpg", #PB_ImagePlugin_JPEG )

Das Programm erstellt nur dann ein Bild, wenn vorher schon ein Bild im Clipboard befindet, andernfalls stürzt das Programm ab.

Gibt es noch andere Möglichkeiten ein Screenshot vom aktuellen Desktop zu erzeugen ?

LG Pureanfänger :-)
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Bei geht es.

Welches PB und Betriebssystem?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Versuchs mal mit einem größeren Timeout und Error-Handling:

Code: Alles auswählen

Save_Picture = ""
UseJPEGImageEncoder()
keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
time = ElapsedMilliseconds() + 2000 ;Timeout nach 2 Sekunden
While time > ElapsedMilliseconds()
  Delay(100)
  If GetClipboardImage(#Image_0)
    Save_Picture = SaveImage(#Image_0, "Screenshot.jpg", #PB_ImagePlugin_JPEG ) 
    Break
  EndIf
Wend
If Save_Picture
  Debug "Screenshot gespeichert!"
Else
  Debug "Screenshot nicht gespeichert!"
EndIf
pureanfänger
Beiträge: 74
Registriert: 29.03.2008 15:22

Beitrag von pureanfänger »

@ mk-soft

PB 4.10 und WinXP

@NicTheQuick

Hab ich auch versucht, es zeigt den gleichen Fehler.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Re: Screenshot wird nicht erstellt ?

Beitrag von scholly »

pureanfänger hat geschrieben:Gibt es noch andere Möglichkeiten ein Screenshot vom aktuellen Desktop zu erzeugen?

Code: Alles auswählen

;nicolaus - http://www.purebasic.fr/german/viewtopic.php?t=10790

Procedure.l CaptureScreen()
  ExamineDesktops()
  width = DesktopWidth(0)
  height = DesktopHeight(0)
  srcDC = CreateDC_("DISPLAY", "", "", dm.DEVMODE)
  trgDC = CreateCompatibleDC_(srcDC)
  BMPHandle = CreateCompatibleBitmap_(srcDC, width, height)
  SelectObject_( trgDC, BMPHandle)
  BitBlt_( trgDC, 0, 0, width, height, srcDC, 0, 0, #SRCCOPY)
  DeleteDC_( trgDC)
  ReleaseDC_(BMPHandle, srcDC)
  CreateImage(0, width, height, 32)
  StartDrawing(ImageOutput(0))
  DrawImage(BMPHandle, 0, 0)
  StopDrawing()
  DeleteObject_(BMPHandle)
EndProcedure

OpenWindow(0,0,0,320,240,"",$CF0001)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_LAYERED)

Delay(100)
CaptureScreen()
ResizeImage(0,640,480)
OpenWindow(1,0,0,640,480,"",$CF0001)
CreateGadgetList(WindowID(1))
ImageGadget(0,0,0,0,0,ImageID(0))
Repeat:Until WaitWindowEvent()=#WM_CLOSE
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
pureanfänger
Beiträge: 74
Registriert: 29.03.2008 15:22

Beitrag von pureanfänger »

Vielen Danke Scholly... du bist mein Retter gewesen !!! Und auch nochmal danke an die anderen.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Ich war's nich :oops: , ich hab nur den Thread mit der Routine von Nicolaus irgendwann mal gefunden: http://www.purebasic.fr/german/viewtopic.php?t=10790
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten