[WINAPI] WM_PAINT pulpitu "Access is denied."

0

Witam chciałbym się podczepić pod procedurę WNDPROC okna pulpitu, aby moc właściwie odświeżać moje rysunki na pulpicie.

HWND hWnd = FindWindow( "Progman", NULL);
hWnd = GetWindow(hWnd, GW_CHILD);
hWnd = GetWindow(hWnd, GW_CHILD);

WNDPROC g_OldWndProc;
g_OldWndProc = (WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)NewWndProc);
DWORD a = GetLastError();

I w tym momencie a przyjmuje mi wartosc 5 co odpowiada "Access is denied.". Więc nie udał się subclassing. Sprawdzałem to na innych oknach i zauważyłem, że występuje ten sam błąd. więc nie można podłączać sie pod procedury innych oknien niż stworzone własnoręcznie...

Pomyślałem że zrobie to za pomocą haków i:

HHOOK hak = SetWindowsHookEx (WH_CALLWNDPROCRET, &WndProcPulp, NULL, GetThreadId (...???...));

Tylko nie wiem co wstawić w miejsce: ...???..., ponieważ nie wiem jak znaleźć Id procesu pulpitu...

Idąc dalej jakim sposobem będę mógł się dowiedzieć w tej procedurze że został przesłany komuniat WM_PAINT?

LRESULT CALLBACK WndProcPulp (int code, WPARAM wParam, LPARAM lParam)
{
}

Z góry bardzo dziękuję za odpowiedzi :)</cpp>

//Edit
deus:
Dzięki wielkie!

0

Co Ty masz człowieku z tym GetThreadId?

Może byś zaczął od czytania dokumentacji przed zadaniem pytania?
GetWindowThreadProcessId do pobrania TIDu okna, co do callbacka zaś dokumentacja CallWndRetProc. Co sprowadza się do:

SetWindowsHookEx (WH_CALLWNDPROCRET, WndProcRet, hModule, GetWindowThreadProcessId(hWnd));

Skąd hModule? Manipulujesz odrębnym procesem, Twój kod musi zostać załadowany w jego przestrzeń adresową - hook ma być w dllce. Ale to przecież napisano w dokumentacji SetWindowsHookEx.

Co do WM_PAINT:

((PCWPRETSTRUCT)lParam)->message;

1 użytkowników online, w tym zalogowanych: 0, gości: 1