Wie kann ich Dateieigenschaften in verschiedenen Sprachen erhalten?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie kann ich Dateieigenschaften in verschiedenen Sprachen erhalten?

Post by Anonymous »

Ich versuche, sprachspezifischen Text für einige Dateieigenschaften abzurufen.
Diese Frage steht im Zusammenhang mit einer früheren Frage: „Warum schlägt das Ändern der Thread-Sprache und zurück für bekannte Ordner fehl?“ "
Die meisten Dateitexteigenschaften sind lesbar und werden von der aktuellen Thread-Sprache nicht beeinflusst. Einige sind jedoch schreibgeschützt und werden von der Sprache beeinflusst. Der Dateiname bekannter Ordner und die Shell-Elementtypen PKEY_ItemType und PKEY_ItemTypeText sind drei solcher Eigenschaften. Bei über 1000 Eigenschaften gibt es wahrscheinlich noch weitere.
Auf meinem PC sind Englisch und Thailändisch installiert. Englisch ist die aktuelle PC-Sprache.
Beim Ändern der Thread-Sprache stelle ich fest, dass das Abrufen von Eigenschaftswerten nicht korrekt funktioniert.
Ein Aufruf von IPropertyStore ::GetValue() gibt manchmal Text in der richtigen Sprache zurück und manchmal nicht.
Ich würde gerne IPropertyStore::GetValue() oder eine Alternative verwenden , um den Text im aktuellen Thread abzurufen Sprache.
Ich füge ein funktionierendes Konsolenprogramm bei, das das Problem zeigt.

Code: Select all

#include 
#include 
#include
#include 

void ShowProperty(const WCHAR *pczDesc, LPITEMIDLIST pidlItem, const PROPERTYKEY& infoKey)
{
IPropertyStore         *pIStore;
PROPVARIANT             propValue;

if(SHGetPropertyStoreFromIDList(pidlItem, GPS_DEFAULT, IID_IPropertyStore, (void **)&pIStore) == S_OK)
{
PropVariantInit(&propValue);

if(pIStore->GetValue(infoKey, &propValue) == S_OK)
{
wprintf(L"%s\n", pczDesc, propValue.bstrVal);

PropVariantClear(&propValue);
}

if(pIStore != NULL)
{
pIStore->Release();
}
}
}

int main()
{
LANGID          nLangPC;
LANGID          nLang2;
LPITEMIDLIST    pidlSystem32;
LPITEMIDLIST    pidlKnownFolder;

CoInitialize(nullptr);

nLang2  = 0x041E; // Thai
nLangPC = GetThreadUILanguage();

if((pidlSystem32 = ILCreateFromPath(L"C:\\Windows\\System32")) != NULL)
{
if(SHGetKnownFolderIDList(FOLDERID_Music, KF_FLAG_DEFAULT, NULL, &pidlKnownFolder) == S_OK)
{
wprintf(L"\n------- 0x%04X ------------\n", nLang2);

SetThreadUILanguage(nLang2);

ShowProperty(L"System32 folder name:      ", pidlSystem32,    PKEY_ItemNameDisplay);
ShowProperty(L"System32 folder type:      ", pidlSystem32,    PKEY_ItemType);
ShowProperty(L"System32 folder type text: ", pidlSystem32,    PKEY_ItemTypeText);
ShowProperty(L"Known folder name:         ", pidlKnownFolder, PKEY_ItemNameDisplay);
ShowProperty(L"Known folder type:         ", pidlKnownFolder, PKEY_ItemType);
ShowProperty(L"Known folder type text:    ", pidlKnownFolder, PKEY_ItemTypeText);

wprintf(L"\n------- 0x%04X ------------\n", nLangPC);

SetThreadUILanguage(nLangPC);

ShowProperty(L"System32 folder name:      ", pidlSystem32,    PKEY_ItemNameDisplay);
ShowProperty(L"System32 folder type:      ", pidlSystem32,    PKEY_ItemType);
ShowProperty(L"System32 folder type text: ", pidlSystem32,    PKEY_ItemTypeText);
ShowProperty(L"Known folder name:         ", pidlKnownFolder, PKEY_ItemNameDisplay);
ShowProperty(L"Known folder type:         ", pidlKnownFolder, PKEY_ItemType);
ShowProperty(L"Known folder type text:    ", pidlKnownFolder, PKEY_ItemTypeText);

ILFree(pidlKnownFolder);
}

ILFree(pidlSystem32);
}

CoUninitialize();
return 0;
}
Ausgabe – mit Anmerkungen für richtig oder falsch

Code: Select all

------- 0x041E ------------
System32 folder name:            - Correct
System32 folder type:           - Wrong
System32 folder type text:     - Correct
Known folder name:                   - Correct
Known folder type:              - Wrong
Known folder type text:       - Correct

------- 0x0809 ------------
System32 folder name:             - Correct
System32 folder type:            - Correct
System32 folder type text:      - Wrong
Known folder name:                    - Wrong
Known folder type:               - Correct
Known folder type text:      - Correct

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post