pp_coder Geschrieben 9. August 2010 Geschrieben 9. August 2010 Hallo zusammen, ich habe folgendes Problem. Ich muss in meinem Programm (wenn es auf einem 64 Bit OS ausgeführt wird) erkennen, ob es sich bei dem durch den Benutzer eingegebenen Verzeichnis um die "Program Files" handelt. Sprich um den Ordner, in dem auf einem 64-Bit OS i.d.R. die 64 Bit Programme installiert werden. Ich kann nicht fest auf Stringebene auf "Programme" bzw. "Program Files" abprüfen, da der Code natürlich auch auf z.B. einem russischen System laufen muss. Ich kann in meinem Programm die WinAPI und QT4 nutzen. Zitieren
Klotzkopp Geschrieben 9. August 2010 Geschrieben 9. August 2010 Leider erwähnst du nicht die Zielplattform. Ab Vista aufwärts gibt es SHGetKnownFolderPath, davor (also XP) SHGetFolderPath. Zitieren
pp_coder Geschrieben 9. August 2010 Autor Geschrieben 9. August 2010 Danke für die schnelle Antwort. Das Programm muss ab XP SP3 aufwärts laufen. Leider liefert bei mir: HRESULT res = SHGetKnownFolderPath(FOLDERID_ProgramFilesX64, 0, NULL, myString); als result: "Das System kann die angegebene Datei nicht finden". Ich vermute mal, das liegt daran, dass mein Programm 32 Bit ist??? Zitieren
Klotzkopp Geschrieben 9. August 2010 Geschrieben 9. August 2010 Das Programm muss ab XP SP3 aufwärts laufen.Warum benutzt du dann SHGetKnownFolderPath? Das geht, wie gesagt, nur ab Vista aufwärts. Leider liefert bei mir: HRESULT res = SHGetKnownFolderPath(FOLDERID_ProgramFilesX64, 0, NULL, myString); [/CODE] als result: "Das System kann die angegebene Datei nicht finden".Das Ergebnis ist ein HRESULT, also ein Zahlenwert. Woher bekommst du diesen Text? Und welchen Wert hat res? Und welches Betriebssystem benutzt du genau? Zitieren
pp_coder Geschrieben 9. August 2010 Autor Geschrieben 9. August 2010 Ich entwickle auf/nutze Win7 X64. HRESULT hat den Hex-Wert: 0x80070002. Den Text hab ich aus dem watch-Fenster meines Developers (VS 2008). Frag mich jetzt nicht wo der die Info her zieht, im winerror.h finde ich zu dem Wert nämlich auch nix. Den oben genannten Wert liefert die Funktion nur, wenn ich sie in meinem 32-Bit Programm verwende. Ich habe den Call testweise mal in einer 64-Bit Bitanwendung ausgeführt, da kommt S_OK zurück und ich erhalte auch nen Pfad. Mein eigentliches Problem ist halt einfach, dass ich den lokalisierten Namen zu "Program Files" bräuchte, nämlich z.B. bei deutschem OS -> Programme. Aber ich finde einfach keine WinApi Funktion die das könnte. Zitieren
Klotzkopp Geschrieben 9. August 2010 Geschrieben 9. August 2010 HRESULT hat den Hex-Wert: 0x80070002.Das ist ERROR_FILE_NOT_FOUND, der Text stimmt also. Der Rückgabewert ist allerdings nicht dokumentiert. Den oben genannten Wert liefert die Funktion nur, wenn ich sie in meinem 32-Bit Programm verwende. Du bist offenbar nicht der Einzige mit genau diesem Problem: SHGetKnownFolderPath for x64 Program Files under WoW64 fails.. Eine Lösung steht da aber leider nicht. Mein eigentliches Problem ist halt einfach, dass ich den lokalisierten Namen zu "Program Files" bräuchte, nämlich z.B. bei deutschem OS -> Programme.Du könntest die Umgebungsvariable ProgramFiles auswerten. Zitieren
pp_coder Geschrieben 9. August 2010 Autor Geschrieben 9. August 2010 Du könntest die Umgebungsvariable ProgramFiles auswerten. Da steht bei mir auch nur der "allgemeine" Pfad "c:\Program Files" drin. Anscheinend gibt Windows die Info, wie der im Windows-Explorer angezeigte Name bei den verschiedenen OS-Sprachen ist, nicht nach außen. Ich dachte ich könnte mir da was in den Quellen vom Verzeichnis-Browse-Dialog von QT abschauen; der listet nämlich "Program Files" auch mit "Programme" auf. Nur leider hat debuggen gezeigt, dass QT default-mäßig einfach über die WinAPI den File-Dialog öffnet. Zitieren
pp_coder Geschrieben 10. August 2010 Autor Geschrieben 10. August 2010 Ich habs. Ein Kollege hat die richtige Funktion gefunden :upps: : SHGetFileInfo Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.