CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Feb 1999
    Posts
    6

    How do you change registry setting using VB??



    I want to change the way the system formats the date in the registry. If a users setting default to m/d/yy I want to change it to mm/dd/yyyy.


    Thanks

    Rick

  2. #2
    Join Date
    May 1999
    Location
    Oxford UK
    Posts
    1,459

    Re: How do you change registry setting using VB??



    Hi


    You don't have to get the date format from the registry at all. The Win32 api allows you to get various information from the computers international setup (dateformat, thousand separator, currency symbol etc).


    I also wouldn't recommend trying to change the users dateformat on their machine. This could cause all kinds of problems if other programs on their system aren't as good as yours ;-)


    I'd recommend obtaining the existing dateformat from the computer and having a routine you call to use your own date format - this ensures that your code is portable to other countries / languages (eg. In europe, we use DD/MM/YY or DD/MM/YYYY, which inside code, we always refer to as YYYY/MM/DD - this ensures that date formats from other countries can always be 'exported' again correctly).



    Here's a code snippet.


    Place the declares in either a BAS module or in your form (changing private / public as required) :


    '

    ' Locale Constants

    '

    Public Const LOCALE_SDECIMAL = &HE

    Public Const LOCALE_SLONGDATE = &H20

    Public Const LOCALE_SSHORTDATE = &H1F

    Public Const LOCALE_SCURRENCY = &H14

    Public Const LOCALE_STHOUSAND = &HF

    Public Const LOCALE_SINTLSYMBOL = &H15

    Public Const LOCALE_STIMEFORMAT = &H1003


    Public Const LOCALE_USER_DEFAULT As Long = &H400


    Public Declare Function GetLocaleInfo Lib "KERNEL32" _

    Alias "GetLocaleInfoA" (ByVal lLocale As Long, _

    ByVal lLocaleType As Long, ByVal sLCData As String, _

    ByVal lBufferLength As Long) As Long


    Public Declare Function GetSystemDefaultLangID Lib _

    "KERNEL32" () As Integer


    Public Declare Function VerLanguageName Lib "KERNEL32" _

    Alias "VerLanguageNameA" (ByVal wLang As Long, _

    ByVal szLang As String, ByVal nSize As Long) As Long



    Now, place the following routine in a BAS module (or wherever you want it) :



    Public Function GetDateFormat() As String

    '

    ' This function will return the Locale date format for the system. Note that the

    ' returned Year is always formatted to 'YYYY' regardless, to ensure compliance with

    ' Y2k stuff.

    '

    Dim lBuffLen As Long

    Dim sBuffer As String

    Dim lResult As Long

    Dim sDateFormat As String



    On Error GoTo vbErrorHandler



    lBuffLen = 128

    sBuffer = String$(lBuffLen, vbNullChar)



    lResult = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, sBuffer, lBuffLen)



    If lResult > 0 Then

    sDateFormat = Left$(sBuffer, lResult - 1)

    '

    ' Make sure we always have YYYY format for y2k

    '

    If InStr(1, sDateFormat, "YYYY", vbTextCompare) = 0 Then

    '

    ' Write your own routine to replace YY with YYYY

    ' Replace sDateFormat, "YY", "YYYY"

    '

    End If



    GetDateFormat = sDateFormat

    Else

    GetDateFormat = "DD/MM/YYYY"

    End If

    Exit Function


    vbErrorHandler:

    Err.Raise Err.Number, "GetDateFormat", Err.Description

    End Function


    Now, whenever you need to access the systems date format, use something like :


    sSysdateFormat = GetDateFormat


    or :


    dteDate = Format(sDateValueValue, GetDateFormat)


    In the GetDateFormat routine, you can apply your own internal format to however you want, ie. MM/DD/YY, M/D/YY etc


    Regards


    Chris Eastwood


    -Zafir

    CodeGuru - the website for developers

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured