Danke UEZ,
hatte ich also das richtige gefunden
Leider sitze ich nun schon ein paar Stunden rum und finde den Fehler nicht, bzw. konnte ich es nun auf _GDIPlus_ImageDispose($hImage) eingrenzen.
Wenn ich während die Funktion ausgeführt wird das Fenster der GUI verschiebe oder schnell mit anderen Fenstern verdecke und wieder sichtbar mache, stürzt das ganze Programm ab
Ebenso wenn ich ein Fenster eines anderen Programms minimiere/verkleinere, während die GUI dahinter ist.
Ich vermute ich mache etwas bei _GDIPlus_ImageDispose($hImage) falsch ?
Das sind die Funktionen die ich nutzen möchte, der Ablauf ist:
1. GUI erstellen und mit Funktion _ReDraw verbinden (Bild soll auch wenn GUI von anderen Fenstern verdeckt ist angezeigt werden)
2. PNG Bild in GUI laden und anzeigen.
3. bei Bedarf geladenes PNG Bild wieder freigeben, damit dieses Überschrieben werden kann.
4. neues PNG Bild einladen
Scheint schwerer zu sein als ich dachte, ein Bild in einer GUI immer anzuzeigen, egal ob die GUI verdeckt ist oder minimiert.
Wärst Du oder ein anderer Leser bitte so nett mir weiterzuhelfen ?
Danke!
So verwende ich die Funktionen bisher:
Global $hGUI = GUICreate("FensterTitel", $SCREENCAP_X, $SCREENCAP_Y,0, 0)
GUISetState()
GUIRegisterMsg($WM_PAINT, "_ReDraw")
;#################################
; Lade erstmalig PNG Bild in GUI
_GDIPlus_Startup()
Global $image = _GDIPlus_ImageLoadFromFile($Screenshot)
Global $graphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImageRect($graphics, $image, 0, 0, $SCREENCAP_X, $SCREENCAP_Y)
;#################################
; später so ein geladenes PNG Bild löschen und Datei freigeben zum überschreiben...
_GDIPlus_ImageDispose($image) ; crasht Programm beim Fensterwechsel...
_WinAPI_DeleteObject($image)
;#################################
; nach dem löschen des alten Bildes, lade neues PNG Bild in GUI
$image = _GDIPlus_ImageLoadFromFile($Screenshot)
_GDIPlus_GraphicsDrawImageRect($graphics, $image, 0, 0, $SCREENCAP_X, $SCREENCAP_Y)
;#################################
; Funktion um Inhalt einer GUI immer anzuzeigen, egal ob minimiert oder verdeckt
Func _ReDraw($hWnd2, $msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $wParam, $lParam
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
_GDIPlus_GraphicsDrawImage($graphics, $image, 0, 0)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
Return $GUI_RUNDEFMSG
EndFunc
Alles anzeigen