[Erledigt] Suche Ersatz fuer RegisterShellHookWindow



  • Hi,

    und zwar schreib ich ein Prgramm, dass das aktuell aktive Window, dessen Titlebar und den exe Name dazu ausließ. Jetzt hab ich frueher schon mal ein Programm gesachriebn, dass das gemacht hat. Aber dies hat das mit RegisterShellHookWindow gemacht und immer eine "HSHELL_WINDOWACTIVATED" oder "HSHELL_RUDEAPPACTIVATED" Nachricht kam wusste ich das das aktive Windo veraendert wurde. Jetz steht aber in der MSDN:

    [This function is not intended for general use. It may be altered or unavailable in subsequent versions of Windows.]
    

    . (Wahrscheinlich stand das damals auch schon drin und ich habs einfach ignoriert, was ich aber jetzt nicht machen will).

    Jetzt ist meine Frage was es fuer alternative geben wuerde? Ich hab jettz schon ShellHook ausprobiert, aber das Problem mit diesem ist, das wenn ich zum Beispiel zwischen Konsolen Fenstern swape kommt keine Nachricht das es ein neues window gibt :(. Oder sollte ich einfach GetForegroundwindow in ner Schleife aufrufen und da halt auf veraenderungen regaieren?

    Greetz C0de4Fun



  • Es ist eigentlich recht einfach:

    • Mit GetForegroundWindow das Fenster bestimmen
    • Mit GetWindowThreadProcessId die Id des Prozesses bestimmen
    • Per OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID) das Prozesshandle erhalten
    • Mit GetModuleFileNameEx den Pfad der ausführbaren Datei erhalten.

    Natürlich das CloseHandle anschließend nicht vergessen. Um den Text der Titelbar zu erhalten einfach GetWindowText aufrufen. Falls das Fenster keine Titelbar hat, wird 0 zurück gegeben.



  • Vicious Falcon schrieb:

    Es ist eigentlich recht einfach:

    • Mit GetForegroundWindow das Fenster bestimmen
    • Mit GetWindowThreadProcessId die Id des Prozesses bestimmen
    • Per OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID) das Prozesshandle erhalten
    • Mit GetModuleFileNameEx den Pfad der ausführbaren Datei erhalten.

    Natürlich das CloseHandle anschließend nicht vergessen. Um den Text der Titelbar zu erhalten einfach GetWindowText aufrufen. Falls das Fenster keine Titelbar hat, wird 0 zurück gegeben.

    Joa danke fuer die Antwort aber das war mir schon bewusst. Das hab ich auch schon in ner Funktion drin stehen. Aber meine Frage ist ja wie ich das bewerkstellige damit ich GetForgroundWindow nicht immer in einer schleife aufrufen muss sonder wie zB. bei RegisterShellHookWindow ein Nachricht bekommen wenn ein das aktive Fenster gewechselt wir.Und nur dann die Funktion aufrufe.. Ist aber auch imho in meinem ersten Post schon rauszulesen.


  • Mod

    Ich würde die Warnung ignorieren und das Tool benutzen.
    Bis Windows 7 funktioniert es.
    BTW: Die Funktion ist nicht mal deprecated gekennzeichnet! Sie wird also auch in der nächsten Windows Funktion enthalten sein...



  • Martin Richter schrieb:

    Ich würde die Warnung ignorieren und das Tool benutzen.
    Bis Windows 7 funktioniert es.
    BTW: Die Funktion ist nicht mal deprecated gekennzeichnet! Sie wird also auch in der nächsten Windows Funktion enthalten sein...

    Super. Das is natuerlich die beste Loesung.
    Danke fuer die Antwort.

    Greetz


Log in to reply