Seite 1 von 1
Screenshot wird nicht erstellt ?
Verfasst: 29.03.2008 15:30
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

Verfasst: 29.03.2008 15:40
von mk-soft
Bei geht es.
Welches PB und Betriebssystem?
Verfasst: 29.03.2008 15:45
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
Verfasst: 29.03.2008 16:09
von pureanfänger
@ mk-soft
PB 4.10 und WinXP
@NicTheQuick
Hab ich auch versucht, es zeigt den gleichen Fehler.
Re: Screenshot wird nicht erstellt ?
Verfasst: 29.03.2008 16:18
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
Verfasst: 29.03.2008 19:04
von pureanfänger
Vielen Danke Scholly... du bist mein Retter gewesen !!! Und auch nochmal danke an die anderen.
Verfasst: 29.03.2008 19:54
von scholly
Ich war's nich

, ich hab nur den Thread mit der Routine von Nicolaus irgendwann mal gefunden:
http://www.purebasic.fr/german/viewtopic.php?t=10790