Um das Date-Gadget aufzunehmen, einfach ein anderes Datum angeben!
Code: Alles auswählen
EnableExplicit
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
;CompilerError "Dieser Code läuft nicht unter Windows!"
CompilerCase #PB_OS_Linux
CompilerError "Dieser Code läuft nicht unter Linux!"
CompilerCase #PB_OS_MacOS
CompilerError "Dieser Code läuft nicht unter MacOS!"
CompilerEndSelect
CompilerIf #PB_Compiler_Version < 540
CompilerError "Es muss mindestens PureBasic Version 5.40 verwendet werden!"
CompilerEndIf
CompilerSelect #PB_Compiler_Debugger
CompilerCase 0
CompilerError "Der Debugger muss eingeschaltet sein!"
CompilerCase 1
;CompilerError "Der Debugger muss ausgeschaltet sein!"
CompilerEndSelect
UsePNGImageEncoder()
Prototype PrintWindow(hWnd, hDC, Flag)
Define Lib = OpenLibrary(#PB_Any, "user32.dll")
If IsLibrary(Lib)
Global PrintWindow_.PrintWindow = GetFunction(Lib, "PrintWindow")
Else
MessageRequester("user32.dll", "Die erforderliche Library konnte nicht korrekt initialisiert werden. Das Programm wird beendet", #MB_ICONERROR|#MB_TOPMOST)
End
EndIf
Procedure CreateWindowShot(hWnd, wClient=#True, x=0, y=0, w=0, h=0)
Protected.i Image, hDC, Flag
Protected.RECT Rect
If IsWindow_(hWnd)
If IsIconic_(hWnd) : OpenIcon_(hWnd) : EndIf
Select wClient
Case #False
GetWindowRect_(hWnd, Rect)
Flag = #Null
Case #True
GetClientRect_(hWnd, Rect)
Flag = #PW_CLIENTONLY
EndSelect
If ValidateRect_(hWnd, Rect)
With Rect
Protected Width = \right - \left
Protected Height = \bottom - \top
EndWith
Image = CreateImage(#PB_Any, Width, Height)
If IsImage(Image)
hDC = StartDrawing(ImageOutput(Image))
If hDC
If Not PrintWindow_(hWnd, hDC, Flag)
FreeImage(Image)
EndIf
GrabDrawingImage(Image, x, y, w, h)
StopDrawing()
Else
FreeImage(Image)
EndIf
EndIf
EndIf
EndIf
ProcedureReturn Image
EndProcedure
; ╔════════════════╤════════════════╗
; ║ ┌─────┴─────┐ ║
; ╟──────────┤ Example ├──────────╢
; ║ └─────┬─────┘ ║
; ╚════════════════╧════════════════╝
Procedure Execute(hWnd, wClient=#False, File$="D:\WindowImage.png")
Protected Image
If IsWindow_(hWnd)
Image = CreateWindowShot(hWnd, wClient)
If IsImage(Image)
Select MessageRequester("Frage", ~"Soll das Bild gespeichert werden?\n\n\"Nein\" zeigt es an.", #MB_ICONQUESTION|#MB_YESNO|#MB_TOPMOST)
Case #IDYES
File$ = SaveFileRequester("", File$, "PNG-Image (.png)|*.png", 0)
If File$
SaveImage(Image, File$, #PB_ImagePlugin_PNG)
EndIf
Case #IDNO
ShowLibraryViewer("Image", Image)
EndSelect
EndIf
EndIf
EndProcedure
Procedure OpenWindow_Window_0()
Protected Window, Button_0, Button_1, Button_2
Window = OpenWindow(#PB_Any, 450, 200, 400, 400, "Window - ©Rudi☺", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
If IsWindow(Window)
SetWindowColor(Window, #Blue)
Button_0 = ButtonGadget(#PB_Any, 1, 1, 398, 35, "Bildschirmfoto vom gesamten Fenster")
Button_1 = ButtonGadget(#PB_Any, 1, 364, 398, 35, "Bildschirmfoto vom Clientbereich")
Button_2 = DateGadget(#PB_Any, 35, 290, 330, 35, "Datum: %dd.%mm.%yyyy, Zeit: %hh:%ii Uhr")
FrameGadget(#PB_Any, 90, 90, 210, 180, "Hinweis:")
TextGadget(#PB_Any, 105, 125, 180, 110, ~"Klicke oben auf den Button, um ein Bildschirmfoto vom gesamten Fenster zu erhalten.\n\n\nKlicke unten auf den Button, um ein Bildschirmfoto nur vom Clientbereich des Fensters zu erhalten.")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case Button_0
Execute(WindowID(Window))
Case Button_1
Execute(WindowID(Window), #True, "D:\ClientImage.png")
Case Button_2
Execute(GadgetID(Button_2), #False, "D:\GadgetImage.png")
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case Window
Break
EndSelect
EndSelect
Until GetAsyncKeyState_(#VK_ESCAPE)&1
CloseWindow(Window)
EndIf
EndProcedure
OpenWindow_Window_0()
If IsLibrary(Lib)
CloseLibrary(Lib)
EndIf
End
- Es können nur bestimmte Gadgettypen aufgenommen werden.
- Es kann nicht der visuelle Fensterrahmenstyle aufgenommen werden.
Habe Dir noch eine Clip-Funtion mit eingebaut.udg hat geschrieben:Ich muss nämlich dafür sorgen dass lediglich der Bereich mit dem Logo (siehe Bild oben) am Ende gespeichert wird. Dein Code zieht ja nur den FensterFrame ab und speichert den Inhalt.