- Offizieller Beitrag
Hi,
in Windows 7 (vllt. auch schon Vista?) werden die allgemein vorhandenen Ordner (Eigene Bilder etc.) in der Sprache der Installation angezeigt, der tatsächliche Ordnerpfad ist aber immer identisch (in englisch hinterlegt).
Windows führt eine Lokalisierung durch, indem in jedem Ordner die Datei "desktop.ini" mit dem Verweis auf den Lokalisierungsstring in der "shell32.dll" hinterlegt wird. (Falls ihr die Originalnamen angezeigt bekommen möchtet, einfach den Lokalisierungsstring in der INI auskommentieren. Die Ini ist als Systemdatei in der Standardeinstellung nicht sichtbar.)
Um Programme mehrsprachig zu gestalten, lassen sich mit der folgenden Funktion für die hinterlegten Ordner (Eigene Bilder etc.), die landesspezifischen Bezeichnungen (abhängig von der Windows-Installation) ermitteln.
Beim Testen am eigenen System werdet ihr keine Wirkung feststellen können, da ihr dort eine deutsche Installation habt und dementsprechend auch die deutsche Bezeichnung wieder zurückgegeben wird.
_GetFolderLocalized
;===============================================================================
; Function Name....: _GetFolderLocalized
; Description......: Returns localized folder name for german counterpart
; Parameter(s).....: German folder name as follows:
; .................: 'Programme'
; .................: 'Programme (x86)'
; .................: 'Startmenü'
; .................: 'Autostart'
; .................: 'Eigene Bilder'
; .................: 'Eigene Dokumente'
; .................: 'Eigene Musik'
; .................: 'Eigene Videos'
; .................: 'Öffentliche Bilder'
; .................: 'Öffentliche Dokumente'
; .................: 'Öffentliche Musik'
; .................: 'Öffentliche Videos'
; Requirement(s)...: Windows 7
; Return Value(s)..: Localized folder name, by using installed system language
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GetFolderLocalized($_sFolderGER)
Local $sDrive = StringLeft(@WindowsDir, 1)
Local $sUser = @UserName
Local $iIndex = -1
Local $aFolder[12][2] = [ _
['Programme' , $sDrive & ':\Program Files' ], _
['Programme (x86)' , $sDrive & ':\Program Files (x86)' ], _
['Startmenü' , $sDrive & ':\Users\' & $sUser & '\AppData\Roaming\Microsoft\Windows\Start Menu' ], _
['Autostart' , $sDrive & ':\Users\' & $sUser & '\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup'], _
['Eigene Bilder' , $sDrive & ':\Users\' & $sUser & '\Pictures' ], _
['Eigene Dokumente' , $sDrive & ':\Users\' & $sUser & '\Documents' ], _
['Eigene Musik' , $sDrive & ':\Users\' & $sUser & '\Music' ], _
['Eigene Videos' , $sDrive & ':\Users\' & $sUser & '\Videos' ], _
['Öffentliche Bilder' , $sDrive & ':\Users\Public\Pictures' ], _
['Öffentliche Dokumente' , $sDrive & ':\Users\Public\Documents' ], _
['Öffentliche Musik' , $sDrive & ':\Users\Public\Music' ], _
['Öffentliche Videos' , $sDrive & ':\Users\Public\Videos' ]]
For $i = 0 To 11
If $aFolder[$i][0] = $_sFolderGER Then
$iIndex = $i
ExitLoop
EndIf
Next
If $iIndex = -1 Then Return SetError(1, 0, 0)
Local $sPathIni = $aFolder[$iIndex][1] & '\desktop.ini'
Local $fh = FileOpen($sPathIni), $sLine, $iNumber = -1
While 1
$sLine = FileReadLine($fh)
If @error = -1 Then ExitLoop
If StringInStr($sLine, 'LocalizedResourceName') Then
$iNumber = StringRegExpReplace($sLine, '(.+shell32\.dll,-)(\d+)\z', '$2')
ExitLoop
EndIf
WEnd
FileClose($fh)
If $iNumber = -1 Then Return SetError(2, 0, 0)
Local $aRet = DllCall("kernel32.dll", "handle", "LoadLibraryExW", "wstr", "shell32.dll", "ptr", 0, "dword", 0x02)
If @error Then Return SetError(@error, @extended, 0)
Local $hDll = $aRet[0]
$aRet = DllCall("user32.dll", "int", "LoadStringW", "handle", $hDll, "uint", $iNumber, "wstr", "", "int", 4096)
If @error Then Return SetError(@error, @extended, 0)
Local $sLocale = $aRet[3]
DllCall("kernel32.dll", "bool", "FreeLibrary", "handle", $hDll)
Return $sLocale
EndFunc ;==>_GetFolderLocalized