Hi,
ich sitz gerade dran eine Anwendung auf einem WorkerW-Fenster zu platzieren, auf dem Desktop hinter den Icons. Das funktioniert nicht ganz wie gewünscht. Wird das Fenster geschlossen, bleibt es sichtbar. Spy++ zeigt aber keine Childs mehr an.
Hier wird das gezeigt:(Malen wie auch Fenster adden)
codeproject.com/Articles/85602…top-Icons-in-Windows-plus
Hab versucht mit RedrawWindow, InvalidateRect und UpdateWindow ein neu zeichnen zu erzwingen, aus Verzweiflung sogar SendMessage WM_PAINT probiert. Wie ich es dreh und wende das Fenster bleibt sichtbar.
Durch Zufall hatte ich dann dem WinForm Opacity = 0 und WindowState auf maximized gestellt.(Im Form Load) Dann ist das Fenster entgegen jeder Erwartung sichtbar, allersdings mit WindowState.Normal, wird die App normal geschlossen oder auch abgeschossen, ist das Fenster weg und auch nicht mehr sichtbar. Scheint aber eher ein Bug zu sein, weil in WPF funktioniert das so nicht, wo dann das Fenster ist, ist nur ein schwarzes Rectangle das auch dableibt. Von daher werde ich das so nicht machen.
Ich kann mir zwar auch den DC vom WorkerW holen und alles in ein Bitmap zwischenspeichern, das Wallpaper ist dann im Bitmap(schon probiert), dieses bitmap dann auf den WorkerW Fenster beim beenden malen. Aber keine echte Lösung, wenn im Taskmanager abgeschossen wird, oder gar ein AppCrash eintreten sollte, muss man den Explorer neu starten, sonst hat man dieses Artefakt erstmal auf'm Bildschirm. F5 auf'm Desktop drücken hilft auch nicht, auch kein ShChangeNotify. Werden nur die Icons vom SysListView32 aktualisiert.
Ich glaube ich bin auf dem Holzweg. Wer hat irgendwelche Informationen für mich, wie man das funktionierend umsetzt? Also eine App auf dem Desktop hinter den Icons. Malen ist zu flickerig und bleibt auch da, das hab ich auch durchgekaut.
Ich hab mal eine WinForms-NET Mappe angelegt die das reproduziert. So wie der Code jetzt ist funktioniert es bei mir(Win11 Pro 22H2). Kommentiert man die beiden Zeilen raus, bleibt das sichtbar.
Wer's probiert hat und das auf Bildschirm hat, einfach diese Commands in eine Bat und ausführen oder in einem Terminal eingeben um den explorer neu zu starten, dann ist alles wieder gut.
PS. verschiebt man das Fenster via Code, wird es verschoben, aber der Bereich ausserhalb des Fensters wird nicht aktualisiert, so bleiben dann auch Artefakte.
PPS. Ist klar, das so keine Mouse-/Keyboard-events durchkommen im Messageloop, das ist auch kein Problem, werde wenn das klappt wie ich hoffe einen Maushook nutzen. Evtl. kann man am WS_EX-Style hantieren, der WorkerW ist ja unter anderem WS_EX_TRANSPARENT(hat nichts mit Opacity zu tun!).
ich sitz gerade dran eine Anwendung auf einem WorkerW-Fenster zu platzieren, auf dem Desktop hinter den Icons. Das funktioniert nicht ganz wie gewünscht. Wird das Fenster geschlossen, bleibt es sichtbar. Spy++ zeigt aber keine Childs mehr an.
Hier wird das gezeigt:(Malen wie auch Fenster adden)
codeproject.com/Articles/85602…top-Icons-in-Windows-plus
Hab versucht mit RedrawWindow, InvalidateRect und UpdateWindow ein neu zeichnen zu erzwingen, aus Verzweiflung sogar SendMessage WM_PAINT probiert. Wie ich es dreh und wende das Fenster bleibt sichtbar.
Durch Zufall hatte ich dann dem WinForm Opacity = 0 und WindowState auf maximized gestellt.(Im Form Load) Dann ist das Fenster entgegen jeder Erwartung sichtbar, allersdings mit WindowState.Normal, wird die App normal geschlossen oder auch abgeschossen, ist das Fenster weg und auch nicht mehr sichtbar. Scheint aber eher ein Bug zu sein, weil in WPF funktioniert das so nicht, wo dann das Fenster ist, ist nur ein schwarzes Rectangle das auch dableibt. Von daher werde ich das so nicht machen.
Ich kann mir zwar auch den DC vom WorkerW holen und alles in ein Bitmap zwischenspeichern, das Wallpaper ist dann im Bitmap(schon probiert), dieses bitmap dann auf den WorkerW Fenster beim beenden malen. Aber keine echte Lösung, wenn im Taskmanager abgeschossen wird, oder gar ein AppCrash eintreten sollte, muss man den Explorer neu starten, sonst hat man dieses Artefakt erstmal auf'm Bildschirm. F5 auf'm Desktop drücken hilft auch nicht, auch kein ShChangeNotify. Werden nur die Icons vom SysListView32 aktualisiert.
Ich glaube ich bin auf dem Holzweg. Wer hat irgendwelche Informationen für mich, wie man das funktionierend umsetzt? Also eine App auf dem Desktop hinter den Icons. Malen ist zu flickerig und bleibt auch da, das hab ich auch durchgekaut.
Ich hab mal eine WinForms-NET Mappe angelegt die das reproduziert. So wie der Code jetzt ist funktioniert es bei mir(Win11 Pro 22H2). Kommentiert man die beiden Zeilen raus, bleibt das sichtbar.
Wer's probiert hat und das auf Bildschirm hat, einfach diese Commands in eine Bat und ausführen oder in einem Terminal eingeben um den explorer neu zu starten, dann ist alles wieder gut.
PS. verschiebt man das Fenster via Code, wird es verschoben, aber der Bereich ausserhalb des Fensters wird nicht aktualisiert, so bleiben dann auch Artefakte.
PPS. Ist klar, das so keine Mouse-/Keyboard-events durchkommen im Messageloop, das ist auch kein Problem, werde wenn das klappt wie ich hoffe einen Maushook nutzen. Evtl. kann man am WS_EX-Style hantieren, der WorkerW ist ja unter anderem WS_EX_TRANSPARENT(hat nichts mit Opacity zu tun!).
Zitat von mir 2023:
Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig
Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()