GetWindowModuleFileName



  • Hi @ll,

    warum bleibt die Rückgabe für GetWindowModuleFileName in meinem Code immer leer?

    HWND hwnd = ::FindWindow(0,"Rechner"); 
    
    	LPTSTR Filename="leer"; 
    
    	GetWindowModuleFileName(hwnd, Filename, sizeof(Filename));
    	MessageBox(Filename);
    

    Habt ihr eine Ahnung? Im buffer kommt nichts an retv = 0;



  • Hast du mal den Rückgabewert der Funktion überprüft? (dort wird signalisiert, ob der Aufruf erfolgreich war)

    Was allerdings auffällt, ist die Tatsache, daß GetModuleFileName() kein Fenster-Handle erwartet, sondern ein Modul-Handle.



  • Hi,

    also der Rückgabewert aus dem Aufruf für GetWindowModuleFileName
    ist NULL. Es schlägt also da schon fehl.

    -->

    Im buffer kommt nichts an retv = 0;

    Ich habe allerdings calc.exe gestartet und der Fenstertitel lautet "Rechner".

    Ich muss zu einem Fensterhandle den Pfad zur Executable bestimmen.
    Für die PID habe ich das schon gelöst, aber das GetWindowModuleFileName
    ärgert mich 😡



  • Modularer schrieb:

    Für die PID habe ich das schon gelöst, aber das GetWindowModuleFileName
    ärgert mich 😡

    Kein Wunder, wenn du es nicht verwendest 😉 (oder wie äußert sich dieses "ärgert mich"?)



  • Verstehe ich da jetzt was falsch?

    Ich verwende doch GetWindowModuleFileName();
    GetModuleFileName() ist ja nicht kompatibel zum hwnd....da HMODULE erwartet wird.

    Was mach ich dann bitte falsch 😕



  • Vergiss alles, was ich gesagt habe - hab doch glatt das "Window" übersehen.

    OK, neuer Ansatz: Was kommt heraus, wenn du nach dem schiefgelaufenen Aufruf GetLastError() abfragst?



  • Kein Problem, dachte erst ich hätte mich verschrieben 😉

    GetLastError kommt mit 0 zurück. Also ist alles mit dem Handle an sich ok. 😮


  • Mod

    HWND hwnd = ::FindWindow(0,"Rechner"); 
    LPTSTR Filename="leer"; 
    GetWindowModuleFileName(hwnd, Filename, sizeof(Filename));
    MessageBox(Filename);
    

    Dein Code kann nicht funktionieren.
    1. Initialisierst Du einen Zeiger mit einem konstanten Speichern in den nicht geladen werden kann.
    2. Ist die Länge 4 diese Zeigers 4 und entsprich tnicht der Größe auf was es zeigt.

    Versuche es mal so:

    HWND hwnd = ::FindWindow(0,"Rechner"); 
    TCHAR szFilename[MAX_PATH]; 
    GetWindowModuleFileName(hwnd, szFilename, MAX_PATH);
    MessageBox(szFilename);
    


  • Hallo Martin,

    jetzt habe ich in der MessageBox für die Ausgabe allerdings ziemlich wilde Zeichen stehen.

    Irgendwas scheint da noch nicht zu stimmen. 😞


  • Mod

    Zeig mal Deinen Code!



  • Aloha,

    wenn man das ganze so ausgeben will kommen nur Sonderzeichen raus.
    Kann man den TCHAR vlt. nicht so in eine MessageBox drücken?


  • Mod

    Was meinst Du mit drücken?
    Zeige mal Deinen Code (zum zweiten)!

    Jede MessageBox nimmt einen TCHAR array als Parameter, sogar mehrere 😉



  • Ich dachte immer eine einfache Zuweisung würde reichen:

    HWND hwnd = ::FindWindow(0,"Rechner"); 
    TCHAR szFilename[MAX_PATH]; 
    GetWindowModuleFileName(hwnd, szFilename, MAX_PATH);
    
    CString inhalt;
    inhalt = szFilename;
    MessageBox(inhalt);
    

    Mehr Code hab ich ja gar net.



  • Und wo wertest du mögliche Fehlsituationen aus? Sowohl der FindWindow() als auch der GetWindowModuleFileName() Aufruf könnten schiefgehen.



  • Hi CStoll,

    ich habe die Fehlerbehandlung hier im Posting rausgelassen, da alles mit
    ER_SUCCESS zurückkehrte.

    Das einzige Problem ist, dass mir in szFilename nur Sonderzeichen
    ausgegeben werden. Und da komme ich einfach nicht weiter. Googel ist zwar
    mein Freund, aber auch hier war das Problem so nirgends zu finden. 😕


  • Mod

    Bist Du sicher das HWND nicht NULL liefert?
    Was ist der Returnwert von GetWindowModuleFileName?



  • Hi,

    bin absolut sicher:

    if(hwnd!=NULL)
    {
    //usw...tritt auch ein
    
    //GetLastError nach GetWindowModuleFileName liefert "0"
    
    }else
    {
    MessageBox("Fehler!");
    }
    

    Bekommt ihr da denn bei euch ein Ergebnis raus??



  • Ich habe es jetzt mit GetWindowThreadProcessId() gelöst, aber warum
    das nicht wie in meinem ersten Code funktioniert würde mich schon
    sehr interessieren.

    Hat der Code bei euch denn überhaupt ein sinnvolles Ergebnis ausgegeben?


Anmelden zum Antworten