auf den desktop malen
-
Hi Leute,
also ich weiß, dass das hier im Forum schon öfter angesprochen wurde, wie man auf den Desktop malt, ich hab trotzdem noch ne Frage dazu: ich habs schon geschafft, bei WM_PAINT auf den desktop zu malen. Jetzt wollt ichs mal außerhalb der WM_PAINT Nachricht versuchen, das hat aber nich geklappt. Und jetzt würd ich gern wissen wie das geht. Ich habs bis jetzt so gemacht:
HWND desktop=GetDesktopWindow(); HDC desktopdc=GetDC(desktop); // hier mal ich dann was ReleaseDC(desktop, desktopdc);Wenn ich das in dem normalen Fenster mach dann funktionierts auch, aber so nicht. Und ich weiß nich warum

Könnt ihr mir da weiterhelfen?MfG Daniel
-
also, das kann man jeder zeit machen
hdc = getDc(0);
mach was;
releaseDC(0, hdc);das wird halt nur überschrieben, sobald du ein fesnter bewegst, aber zum schnellen testen von etwas reichts allemal
-
he cool danke so funktionierts

und wie sollt ichs machen wenn ich will dass es da bleibt?
-
wenn du das willst, musst du einen hook schreiben, der sich in die paint-nachricht vom desktop hängt.
hooks sind recht komplex.
Wenn du hierbei fehler machst, kannst du schon mal windows mit in den tod reißen, außerdem debugt sichs rech schwierig.edit:
vorgehensweise:
dll schreiben:dllEntry
installHook
uninstallHook
hook_procedure:programm schreiben
dass dll läd und installHook und uninstallHook aufrufthab leider grad nur ein asm-beispiel zur hand, aber die nötigen api-calls kannst du daraus ja ablesen (siehe invokes)
das ganze ist aber ein mouseHook, MessageHooks gehen aber ähnlich
.386 .model flat,stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib include user32.inc includelib user32.lib .data hInstance dd 0 .data? hHook dd ? .code DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD push hInst pop hInstance mov eax,TRUE ret DllEntry Endp MouseProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD mov edx,lParam assume edx:PTR MOUSEHOOKSTRUCT ; mach etwas invoke CallNextHookEx,hHook,nCode,wParam,lParam xor eax, eax ; eax öschen, da rückgabewert 0 sein muss xor edx, edx assume edx:nothing ret MouseProc endp InstallHook proc hwnd:DWORD invoke SetWindowsHookEx,WH_MOUSE,addr MouseProc,hInstance,NULL mov hHook,eax ret InstallHook endp UninstallHook proc invoke UnhookWindowsHookEx,hHook ret UninstallHook endp End DllEntry
-
lol ok ich glaub das is n bisschen ziemlich viel zu hoch für mich aber danke für die antwort

gibts da nix einfacheres?