Rubrik: System/Windows · Computer/Benutzer/Ländereinstellungen | VB-Versionen: VB6 | 25.08.08 |
Zahlenformat systemweit ändern Diese Funktion ermöglicht das Ändern des im System eingestellte Zahlen- und Währungsformats. | ||
Autor: Dieter Otter | Bewertung: | Views: 17.009 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Mit nachfolgender Funktion lässt sich das im System eingestellte Zahlen- und Währungsformat (Tausender- und Dezimaltrennzeichen) neu festlegen - entweder für den aktuell angemeldeten Benutzer oder auf Wunsch auch auf alle Benutzer.
' benötigte API-Deklarationen Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long Private Declare Function SetLocaleInfo Lib "kernel32" _ Alias "SetLocaleInfoA" ( _ ByVal Locale As Long, _ ByVal LCType As Long, _ ByVal lpLCData As String) As Long Private Declare Function PostMessage Lib "user32" _ Alias "PostMessageA" ( _ ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Private Const LOCALE_SMONDECIMALSEP = &H16 Private Const LOCALE_SDECIMAL = &HE Private Const LOCALE_SMONTHOUSANDSEP = &H17 Private Const LOCALE_STHOUSAND = &HF Private Const WM_SETTINGCHANGE = &H1A Private Const HWND_BROADCAST = &HFFFF&
Public Function SetNewNumberFormat(ByVal sDecChar As String, _ Optional ByVal sGroupChar As String = "", _ Optional ByVal bAllUser As Boolean = True) As Boolean Dim nLCID As Long Dim bResult As Boolean If bAllUser Then ' systemweite Änderung für alle Benutzer nLCID = GetSystemDefaultLCID() Else ' Änderung nur für den aktuell angemeldeten Benutzer nLCID = GetUserDefaultLCID() End If ' Neues Währungsformat setzen bResult = (SetLocaleInfo(nLCID, LOCALE_SMONDECIMALSEP, sDecChar) <> 0) bResult = (SetLocaleInfo(nLCID, LOCALE_SMONTHOUSANDSEP, sGroupChar) <> 0) ' Neues Zahlenformat setzen bResult = (SetLocaleInfo(nLCID, LOCALE_SDECIMAL, sDecChar) <> 0) bResult = (SetLocaleInfo(nLCID, LOCALE_STHOUSAND, sGroupChar) <> 0) If bResult Then ' System über die Änderung benachrichtigen PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0 End If SetNewNumberFormat = bResult End Function
Beispielaufruf:
' Punkt als Tausenderzeichen, und Komma als Dezimalzeichen ' für den aktuellen Benutzer festlegen If SetNewNumberFormat(",", ".", False) Then MsgBox "Zahlen- und Währungsformat wurden korrekt umgestellt" Else MsgBox "Systemeinstellungen konnten nicht geändert werden." & vbCrLf & _ "Ggf. hat der angemeldete Benutzer nicht genügend Rechte!" End If