Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Programe VS. Programme (x86)

Empfohlene Antworten

Veröffentlicht

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.

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???

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?

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. :(

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.

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.

Ich habs.

Ein Kollege hat die richtige Funktion gefunden :upps: :

SHGetFileInfo

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.