WndProc eines _fremden_ Fensters ersetzen



  • Hi!

    Wie ersetzt man die WndProc eines _fremden_ Fensters, z.B. des Internet Explorers, wenn man ein Handle darauf hat (mit FindWindow ermittelt)?

    thx & cu



  • SetWindowLongPtr(hwnd, GWLP_WNDPROC, NeueWndProc);

    Die Funktion gibt dir die alte zurück.

    Mfg,
    Black Shadow



  • Die Funktion SetWindowLongPtr gibt es bei mir (Visual C++ 6.0 Standard) nicht. Ich habe die winuser.h inkludiert und die user32.lib gelinkt, nichts.

    thx & cu



  • Dann brauchst du einen neuen PSDK oder musst anstelle einfach SetWindowLong verwenden (im Gegensatz zu SetWindowLongPtr kein 64-bit)



  • Also zumindest SetWindowLong funktioniert bei NT-Systemen nicht mit fremden Fenstern. Ich glaube bei SetWindowLongPtr wird es sich genauso verhalten.
    Schau mal in der FAQ zu dem Thema.



  • Das wäre mir neu, also unter Win2000 funktionierts wunderbar.



  • Danke auf jeden Fall mal für die brauchbaren Antworten. Ich werd mir wohl mal das neue PSDK saugen :D.

    thx & cu



  • Original erstellt von Black Shadow:
    Das wäre mir neu, also unter Win2000 funktionierts wunderbar.

    Ganz bestimmt tut es das nicht! Direkt aus der MSDN zum ersten Parameter von SetWindowLongPtr():

    [in] Handle to the window and, indirectly, the class to which the window belongs. The SetWindowLongPtr function fails if the window specified by the hWnd parameter does not belong to the same process as the calling thread.

    Ich verstehe nicht, warum hier Leute immer wieder Sachen posten, die einfach nicht stimmen und dann auch noch so tun, als wären sie sich ganz sicher. Und BTW: Diese Frage wurde schon sooo oft gestellt, und immer wieder kam diese Antwort mit SetWindowLong/Ptr. Ein für allemal: das geht so nicht! Man kann das mit nem WindowProc-Hook machen.

    [ Dieser Beitrag wurde am 09.12.2002 um 14:17 Uhr von WebFritzi editiert. ]



  • SetWindowLongPtr funktioniert bestimmt, aber nicht bei fremden Fenstern. Aber mit fremden Fenstern geht das auch mit einer DLL, Hook oder sowas. Steht glaub ich in der FAQ.



  • hmm, hatte dazu mal was gepostet, dürfte noch in den FAQ stehen ... unter win2k/nt klinkt man sich in die fenster-proc eines fremden prozesses über einen remote-thread ein ...

    SetWindowLong() funktioniert NICHT prozessübergreifend !

    RockNix ///


Anmelden zum Antworten