Desktop-Nachrichten
-
Hi,
ich möchte ein Programm schreiben, das etwas auf Desktop zeichnet! Das Zeichnen ist keine Problem und klappt! Nun muss man dazu aber wissen, wann die Zeichnung aktualisiert werden muss, weil der entsprechende Teil des Desktops zum Beispiel von einem anderen Fenster überzeichnet worden ist. Könnte mir vielleicht jemand zeigen, wie man ein Programm schreibt, das Desktop-Nachrichten in seiner eigenen Windows Procedure verarbeitet?
Danke schon mal im Voraus!
MfG
Willi M.
-
Das Desktopfenster gehört ja nicht zum gleichen Thread wie der Messageloop deines Programms. Daher würde ich einen Haken auswerfen mit SetWindowsHookEx und dann die WM_PAINT o.ä. abfangen.
-
Subclass Desktop Fenster mit CreateRemoteThread DLL
-
So, mein Aufruf von SetWindowHookEx sieht nun so aus:
hHook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, (HINSTANCE) NULL, GetCurrentThreadId()) ;Aber ich müsste GetWindowThreadId noch durch eine Funktion ersetzen, die die Desktop Thread ID zurückliefert. Weißt du eine?
Der nächste Punkt ist die Prozedur, die die Nachrichten des Desktop Windows bearbeiten soll. Wie kann ich aus den Parametern eine herkömmliche Window-Message-Konstante umwandeln (wie z.B. WM_PAINT)?
LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { // ... }MfG
Willi M.
-
GetWindowThreadProcessId
lParam
[in] Pointer to a CWPSTRUCT structure that contains details about the message.typedef struct { LPARAM lParam; WPARAM wParam; UINT message; HWND hwnd; } CWPSTRUCT, *PCWPSTRUCT;Members
lParam
Specifies additional information about the message. The exact meaning depends on the message value.
wParam
Specifies additional information about the message. The exact meaning depends on the message value.
message
Specifies the message.
hwnd
Handle to the window to receive the message.‾ω‾