Ganz oben Malen
-
WM_MOUSEACTIVATE: return MA_NOACTIVATE.
-
wenn ich das mache und drauf klicke bekommt das hintere fenster (falls es eines gibt) keinen Fokus
-
Hallo,
du kannst ein Beispiel bei Codeproject finden: http://www.codeproject.com/w2k/forecast.asp
Das Beispiel erstellt ein Fenster mit den Window-Styles:
WS_EX_LAYERED
WS_EX_TOPMOST
WS_EX_TRANSPARENTMfG
Anakin
-
dazu hätt ich auch ne frage: ist es möglich, dass das quasi nur in den Desktop gezeichnet wird?
und zwar, ihr kennt doch sicher unter linux diese ganzen tools, die die prozessorleistung oder das wetter oder sonst was anzeigen, die nur in den desktop gezeichnet werden (sprich, wenn man ein fenster darüber schiebt sieht man die tools auch nicht mehr
)MfG, Herr-Vorragend
-
dafür benutzt man fenster
-
he? also der desktop soll praktisch die ganzen verknüpfungen haben, ein nettes hintergrundbild und die aktuelle prozessorleistung. vielleicht hab ich mich unverständlich ausgedrückt?
-
weiß niemand ne lösung? gibt es überhaupt eine?
-
Meinst du sowas wie die Startleiste? Oder soll sich das anders verhalten?
-
also, es soll so aussehen (wenn alle fenster minimiert sind):
unten ist die taskleiste, darüber das hintergrundbild, links sind die ganzen verknüpfungen und rechts oben ist die prozessortleistung, einfach nur ne zahl, die sich jede sekunde oder so aktualisiert. also nix mit fenstern oder so, ich will quasi einfach in das hintergrundbild zeichen.
-
gibts dafür nicht active desktop?
-
hm, schon möglich, ich würde das aber gern selbst programmieren

-
Hallo,
eine Möglichkeit wäre das anzuzeigende Fenster mit SetWindowPos in den Vordergrund zu setzen. (hWndInsertAfter = HWND_TOPMOST)
MfG
Anakin
-
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"