要使用SetLocaleInfo函数,然后发送信息WM_SETTINGCHANGE。具体的例子可以参考微软的Knowledge Base的文章:“Q168793 OWTO: Change the Short Date Format from Visual Basic”(http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q168/7/93.asp&NoWebContent=1)或者,先修改注册表,再发送消息WM_SETTINGCHANGE,下面的例子是win2k下的例子,不同的系统要修改的位置可能不同,你可以用regshot获得具体的位置: Private Declare Function SendMessageTimeout Lib "user32" _ Alias "SendMessageTimeoutA" _ (ByVal hwnd As Long, ByVal msg As Long, _ ByVal wParam As Long, ByVal lParam As Long, _ ByVal fuFlags As Long, ByVal uTimeout As Long, _ lpdwResult As Long) As LongPrivate Const HWND_BROADCAST = &HFFFF& Private Const WM_WININICHANGE = &H1A Private Const WM_SETTINGCHANGE = WM_WININICHANGE Private Const SMTO_ABORTIFHUNG = &H2 Private Const SMTO_BLOCK = &H1 Private Const SMTO_NORMAL = &H0Private Function BroadCastSettingChange(Optional ByVal TimeOut As Long = 5000) As Long Dim lngMsgReturn As Long 'This may take a while to return. If SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, _ 0, 0, SMTO_ABORTIFHUNG Or SMTO_NORMAL, TimeOut, lngMsgReturn) Then BroadCastSettingChange = lngMsgReturn Else BroadCastSettingChange = -1 End If
End FunctionPrivate Sub Command1_Click() '首先引用Windows Script Host Object Model Dim wshobj As New WshShell wshobj.RegWrite "HKEY_USERS\S-1-5-21-436374069-1957994488-1383336323-1000\Control Panel\International\sTimeFormat", "H:mm:ss" Set wshobj = Nothing BroadCastSettingChange End Sub
用SetLocaleInfo 来实现Private Declare Function GetSystemDefaultLCID 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 Boolean Private Const LOCALE_SLONGDATE = &H20 Private Const LOCALE_SSHORTDATE = &H1F Private Const LOCALE_STIME = &H1E Private Sub Command1_Click() Dim lngLocale As Long lngLocale = GetSystemDefaultLCID() If lngLocale = 2052 Then SetLocaleInfo lngLocale, LOCALE_SLONGDATE, "yyyy'年'M'月'd'日'"End Sub
Private Declare Function SendMessageTimeout Lib "user32" _
Alias "SendMessageTimeoutA" _
(ByVal hwnd As Long, ByVal msg As Long, _
ByVal wParam As Long, ByVal lParam As Long, _
ByVal fuFlags As Long, ByVal uTimeout As Long, _
lpdwResult As Long) As LongPrivate Const HWND_BROADCAST = &HFFFF&
Private Const WM_WININICHANGE = &H1A
Private Const WM_SETTINGCHANGE = WM_WININICHANGE
Private Const SMTO_ABORTIFHUNG = &H2
Private Const SMTO_BLOCK = &H1
Private Const SMTO_NORMAL = &H0Private Function BroadCastSettingChange(Optional ByVal TimeOut As Long = 5000) As Long
Dim lngMsgReturn As Long
'This may take a while to return.
If SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, _
0, 0, SMTO_ABORTIFHUNG Or SMTO_NORMAL, TimeOut, lngMsgReturn) Then
BroadCastSettingChange = lngMsgReturn
Else
BroadCastSettingChange = -1
End If
End FunctionPrivate Sub Command1_Click()
'首先引用Windows Script Host Object Model
Dim wshobj As New WshShell
wshobj.RegWrite "HKEY_USERS\S-1-5-21-436374069-1957994488-1383336323-1000\Control Panel\International\sTimeFormat", "H:mm:ss"
Set wshobj = Nothing
BroadCastSettingChange
End Sub
Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
Private Const LOCALE_SLONGDATE = &H20
Private Const LOCALE_SSHORTDATE = &H1F
Private Const LOCALE_STIME = &H1E
Private Sub Command1_Click()
Dim lngLocale As Long
lngLocale = GetSystemDefaultLCID()
If lngLocale = 2052 Then SetLocaleInfo lngLocale, LOCALE_SLONGDATE, "yyyy'年'M'月'd'日'"End Sub