请问如何在vb中用代码设定计算机区域设置当中的时间格式为长时间格式,最好能给出代码,谢谢!

解决方案 »

  1.   

    要使用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
      

  2.   

    用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