Ganz oben Malen
-
hm, dann wärs ja aber über allen anderen fenster, es soll ja aber nur praktisch im hintergrundbild sein...
-
dann hack dich doch in den explorer prozess ein (dll injezieren) und das desktop fenster subclassen und WM_PAINT behandeln.
-
sorry, versteh ich nicht so ganz, also ich kann ja nicht einfach mit SetWindowLong die WndProc ändern, ist ja in externen prozessen nicht erlaubt. was meinst du mit dll injezieren?
-
google?
-
sorry wenn ich nerve ^^
Es gibt mehrere Möglichkeiten.. die 2 gängigsten:
-
einen Message-Hook für einen bestimmten Thread (von dem Prozess in den du die Dll injezieren willst), dann eine WM_NULL Message an den Thread schicken. Dadurch ladet Windows deine Hook-Dll in den Prozessraum des betroffenen Prozesses -> Injektion erfolgreich
-
Mittels CreateRemoteThread einen Thread in einem fremden Prozess erzeugen. Hinweis: CreateRemoteThread funktioniert nur auf NT-Systemen!
das hab ich gefunden, versteh aber beides nicht zu 100%. kann mir einer erklären welche methode hier besser ist, und wenn ja, wie ich sie anwenden muss?
MfG, Herr-Vorragend
-
-
Würde das net gehen wenn du einfach mit GetDesktopWindow() ein Handle auf den Desktop besorgst und dann reinmalst?
-
hab ich auch schon probiert, es wird aber bei mir nichts angezeigt. ist ja auch irgendwo klar, weil der desktop ja andauernd WM_PAINT nachrichten bekommt und dann is meins ja weg.
-
Fenster mit WS_EX_NOACTIVATE und WS_EX_TOPMOST erstellen.
Ersteres sorgt dafür, das dein Fenster nie den Fokus erhält.
Letzteres dafür das über den anderen Fenstern ist.
Falls Du noch transparenz willst, würde ich WS_EX_LAYERED noch dazupacken und mit
SetLayeredWindowAttributes() die Farbe die transparent werden soll setzen...
Man müsste dann nur noch die Klicks an tieferliegende Fenster "weiterleiten"
-
danke, hast mich auf die richtige idee gebracht, und zwar wollte ich eigentlich genau das gegenteil von WS_EX_TOPMOST, also hab ich HWND_BOTTOM bei SetWindowPos genommen
