Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0206: Verfügbare Ländereinstellungen auslesen

 von 

Beschreibung 

Listet alle auf einem System verfügbaren Ländereinstellungen auf.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

RtlMoveMemory (CopyMemory), EnumSystemLocalesA (EnumSystemLocales), GetLocaleInfoA (GetLocaleInfo)

Download:

Download des Beispielprojektes [2,92 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Listen-Steuerelement "List1"
' Steuerelement: Optionsfeld-Steuerelement "Option1" (Index von 0 bis 2)
Option Explicit

Private Sub Form_Load()
  Option1(0).Value = True
End Sub

Private Sub Option1_Click(Index As Integer)
  Call EnumLocales(Index, List1)
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'--------- Anfang Modul "Module1" alias Module1.bas ---------

Option Explicit

Private Declare Function EnumSystemLocales Lib "kernel32" _
        Alias "EnumSystemLocalesA" (ByVal lpLocaleEnumProc _
        As Long, ByVal dwFlags As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias _
        "RtlMoveMemory" (Destination As Any, Source As Any, _
        ByVal Length As Long)

Private Declare Function GetLocaleInfo Lib "kernel32" _
        Alias "GetLocaleInfoA" (ByVal Locale As Long, _
        ByVal LCType As Long, ByVal lpLCData As String, _
        ByVal cchData As Long) As Long
   
Const LCID_INSTALLED = &H1
Const LCID_SUPPORTED = &H2
Const LCID_ALTERNATE_SORTS = &H4

Const LOCALE_SNATIVELANGNAME = &H4
Const LOCALE_SNATIVECTRYNAME = &H8

Dim LCID() As Long

Public Sub EnumLocales(Mode%, LB As ListBox)
  Dim x%, aa$, Flag&
    
    Select Case Mode
      Case 0:    Flag = LCID_INSTALLED
      Case 1:    Flag = LCID_SUPPORTED
      Case 2:    Flag = LCID_ALTERNATE_SORTS
      Case Else: Flag = 0
    End Select
    
    If Flag Then
      ReDim LCID(0 To 0)
      LB.Clear
      
      Call EnumSystemLocales(AddressOf LocaleEnumProc, Flag)
      For x = 0 To UBound(LCID) - 1
        aa = CStr(LCID(x)) & " "
        aa = aa & GetEntry(LCID(x), _
                           LOCALE_SNATIVECTRYNAME) & " ["
        aa = aa & GetEntry(LCID(x), _
                           LOCALE_SNATIVELANGNAME) & "]"
        LB.AddItem aa
      Next x
    Else
      MsgBox ("Diese Option wird nicht unterstützt!")
    End If
End Sub

Private Function LocaleEnumProc(LICD_Pointer&) As Long
  Dim Buffer$
  
    Buffer = Space$(255)
    Call CopyMemory(ByVal Buffer, LICD_Pointer, Len(Buffer))
    Buffer = "&H" & Left$(Buffer, InStr(Buffer, Chr$(0)) - 1)
    LCID(UBound(LCID)) = CLng(Buffer)
    ReDim Preserve LCID(0 To UBound(LCID) + 1)
    LocaleEnumProc = 1&
End Function

Private Function GetEntry(LCID&, ID&) As String
  Dim Result&, Buffer$, Length&

    Length = GetLocaleInfo(LCID, ID, Buffer, 0) - 1
    If Length > 0 Then
      Buffer = Space(Length + 1)
      Result = GetLocaleInfo(LCID, ID, Buffer, Length)
      GetEntry = Left$(Buffer, Length)
    End If
End Function
'---------- Ende Modul "Module1" alias Module1.bas ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Rick am 20.04.2004 um 13:49

Ein klasse Tip.....nur wie bekomme ich die Ländereinstellungen/Ausgabe in einer (festgelegten) Sprache?

Hier ist es so, dass 1031 Deutsch in Deutsch angezeigt wird, 1033 Englisch in englisch angezeigt.....Französisch in französisch....etc.

Gruß Rick