GetLocalDirName (Windows Vista +)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

GetLocalDirName (Windows Vista +)

Beitrag von ts-soft »

Diejenigen, die den Windows-Explorer nutzen, sind es wahrscheinlich gewohnt, deutsche Ordnernamen zu sehen,
aber das ist gar nicht so selbstverständlich, da diese gar nicht existieren :mrgreen: (zumindest unter Vista und 7)
Um jetzt den Orginalpfad in der Sprache des Benutzers zu übersetzen, ist diese kleine Procedure nützlich (hoffe ich mal :wink: )

Code: Alles auswählen

EnableExplicit

Procedure.s GetLocalDirName(Dir.s)
  If Right(Dir, 1) <> "\" : Dir + "\" : EndIf
 
  Protected KeyValue.s, expandedKey.s, ResDLL.s, ResValue.s, lpBuffer.s
  Protected hDLL, i
  Protected count = CountString(Dir, "\")
  Protected tmpDir.s = StringField(Dir, 1, "\") + "\"
 
  For i = 2 To count
    KeyValue = Space(#MAX_PATH) : expandedKey = Space(#MAX_PATH) : lpBuffer = Space(#MAX_PATH)
    tmpDir + StringField(Dir, i, "\") + "\"
    If GetPrivateProfileString_(".ShellClassInfo", "LocalizedResourceName", 0, @KeyValue, #MAX_PATH, tmpDir + "desktop.ini")
      If Left(KeyValue, 1) = "@" : KeyValue = Mid(KeyValue, 2) : EndIf
      If ExpandEnvironmentStrings_(KeyValue, @expandedKey, #MAX_PATH)
        ResDLL = StringField(expandedKey, 1, ",")
        ResValue = StringField(expandedKey, 2, ",")
        If Left(ResValue, 1) = "-" : ResValue = Mid(ResValue, 2) : EndIf
        hDLL = LoadLibraryEx_(ResDLL, 0, #LOAD_LIBRARY_AS_DATAFILE)
        If hDLL
          If LoadString_(hDLL, Val(ResValue), @lpBuffer, #MAX_PATH)
            Dir = ReplaceString(Dir, StringField(Dir, i, "\"), lpBuffer)
          EndIf
          FreeLibrary_(hDLL)
        EndIf
      EndIf
    EndIf
  Next
  ProcedureReturn Dir
EndProcedure

Debug GetLocalDirName("c:\Program Files\")
Debug GetLocalDirName(GetHomeDirectory() + "Documents\") 
Achtung: Diese Pfade dienen nur der Ansicht, sind also für nichts anderes nutzbar.
Zuletzt geändert von ts-soft am 27.04.2012 20:48, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: GetLocalDirName (Windows Vista +)

Beitrag von RSBasic »

:allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GetLocalDirName (Windows Vista +)

Beitrag von ts-soft »

Vielleicht ist das ja was, für die WinAPI library?

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: GetLocalDirName (Windows Vista +)

Beitrag von RSBasic »

Jupp, habs bereits in meinem "Neue API-Sources"-Ordner eingefügt. :wink:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GetLocalDirName (Windows Vista +)

Beitrag von ts-soft »

Schön, hab das Beispiel noch leicht angepasst, so das keiner mehr Thomas heißen muss <)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: GetLocalDirName (Windows Vista +)

Beitrag von RSBasic »

Gut, danke, hab die Datei aktualisiert. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: GetLocalDirName (Windows Vista +)

Beitrag von Falko »

Das ist ja praktisch :allright:
Danke, Thomas
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten