Mengganti Regional Setting Komputer adakalanya perlukan, untuk menghindari kesalahan antara presentasi program dan database, terutama data dgn type "datetime" , karena biaanya programer menyeting tanggal programnya dengan setting "english (US)" atau default komputernya, sedangkan USER biasanya menyeting regional setting dengan "indonesia" , nah biasanya disini terjadi kesalah.
Untuk mengatasi ini ada juga yang menggunakan "culture info" atau "my.Application.ChangeCulture" , tapi ini hanya berlaku di aplikasi kita saja.
Code berikut akan mengganti/menetapkan regional setting komputer kita agar sesuai dengan setting aplikasi yg kita buat, jadi ga perlu repot2 menyuruh user mengganti secara manual dari kontrol panel, dan ga perlu kuatir si USEr pekok lupa menggantinya, karena setiap aplikasi jalan, otomatissss komputer mengubah regional setting yg kita tetapkan,,
Berikut Codenya :
Imports System.Runtime.InteropServices
Public Class Form1
Private USASettings As New List(Of RegionalSettings)
Private UKSettings As New List(Of RegionalSettings)
Private Class RegionalSettings
Public entry As String
Public value As String
Public Sub New(ByVal key As String, ByVal value As String)
Me.entry = key : Me.value = value
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With USASettings
.Add(New RegionalSettings("iCountry", "1"))
.Add(New RegionalSettings("iCurrDigits", "2"))
.Add(New RegionalSettings("iCurrency", "0"))
.Add(New RegionalSettings("iDate", "1"))
.Add(New RegionalSettings("iDigits", "2"))
.Add(New RegionalSettings("iLZero", "1"))
.Add(New RegionalSettings("iMeasure", "1"))
.Add(New RegionalSettings("iNegCurr", "0"))
.Add(New RegionalSettings("iTime", "0"))
.Add(New RegionalSettings("iTLZero", "0"))
.Add(New RegionalSettings("Locale", "00000409"))
.Add(New RegionalSettings("s1159", "AM"))
.Add(New RegionalSettings("s2359", "PM"))
.Add(New RegionalSettings("sCountry", "United States"))
.Add(New RegionalSettings("sCurrency", "$"))
.Add(New RegionalSettings("sDate", "/"))
.Add(New RegionalSettings("sDecimal", "."))
.Add(New RegionalSettings("sLanguage", "ENU"))
.Add(New RegionalSettings("sList", ","))
.Add(New RegionalSettings("sLongDate", "dddd, MMMM dd, yyyy"))
.Add(New RegionalSettings("sShortDate", "M/d/yyyy"))
.Add(New RegionalSettings("sThousand", ","))
.Add(New RegionalSettings("sTime", ":"))
.Add(New RegionalSettings("sTimeFormat", "h:mm:ss"))
.Add(New RegionalSettings("iTimePrefix", "0"))
.Add(New RegionalSettings("sMonDecimalSep", "."))
.Add(New RegionalSettings("sMonThousandSep", ","))
.Add(New RegionalSettings("iNegNumber", "1"))
.Add(New RegionalSettings("sNativeDigits", "0123456789"))
.Add(New RegionalSettings("NumShape", "1"))
.Add(New RegionalSettings("iCalendarType", "1"))
.Add(New RegionalSettings("iFirstDayOfWeek", "6"))
.Add(New RegionalSettings("iFirstWeekOfYear", "0"))
.Add(New RegionalSettings("sGrouping", "3;0"))
.Add(New RegionalSettings("sMonGrouping", "3;0"))
.Add(New RegionalSettings("sPositiveSign", ""))
.Add(New RegionalSettings("sNegativeSign", "-"))
End With
With UKSettings
.Add(New RegionalSettings("iCountry", "44"))
.Add(New RegionalSettings("iCurrDigits", "2"))
.Add(New RegionalSettings("iCurrency", "0"))
.Add(New RegionalSettings("iDate", "1"))
.Add(New RegionalSettings("iDigits", "2"))
.Add(New RegionalSettings("iLZero", "1"))
.Add(New RegionalSettings("iMeasure", "0"))
.Add(New RegionalSettings("iNegCurr", "1"))
.Add(New RegionalSettings("iTime", "1"))
.Add(New RegionalSettings("iTLZero", "1"))
.Add(New RegionalSettings("Locale", "00000809"))
.Add(New RegionalSettings("s1159", "AM"))
.Add(New RegionalSettings("s2359", "PM"))
.Add(New RegionalSettings("sCountry", "United Kingdom"))
.Add(New RegionalSettings("sCurrency", "£"))
.Add(New RegionalSettings("sDate", "/"))
.Add(New RegionalSettings("sDecimal", "."))
.Add(New RegionalSettings("sLanguage", "ENG"))
.Add(New RegionalSettings("sList", ","))
.Add(New RegionalSettings("sLongDate", "dd MMMM yyyy"))
.Add(New RegionalSettings("sShortDate", "dd/MM/yyyy"))
.Add(New RegionalSettings("sThousand", ","))
.Add(New RegionalSettings("sTime", ":"))
.Add(New RegionalSettings("sTimeFormat", "HH:mm:ss"))
.Add(New RegionalSettings("iTimePrefix", "0"))
.Add(New RegionalSettings("sMonDecimalSep", "."))
.Add(New RegionalSettings("sMonThousandSep", ","))
.Add(New RegionalSettings("iNegNumber", "1"))
.Add(New RegionalSettings("sNativeDigits", "0123456789"))
.Add(New RegionalSettings("NumShape", "1"))
.Add(New RegionalSettings("iCalendarType", "1"))
.Add(New RegionalSettings("iFirstDayOfWeek", "0"))
.Add(New RegionalSettings("iFirstWeekOfYear", "0"))
.Add(New RegionalSettings("sGrouping", "3;0"))
.Add(New RegionalSettings("sMonGrouping", "3;0"))
.Add(New RegionalSettings("sPositiveSign", ""))
.Add(New RegionalSettings("sNegativeSign", "-"))
End With
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each reg As RegionalSettings In UKSettings
Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International", reg.entry, reg.value)
Next
NotifyInternationalChanges()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
For Each reg As RegionalSettings In USASettings
Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International", reg.entry, reg.value)
Next
NotifyInternationalChanges()
End Sub
Private Sub NotifyInternationalChanges()
'Ref: http://msdn.microsoft.com/en-us/library/windows/desktop/ms725497%28v=vs.85%29.aspx
Dim HWND_BROADCAST As New IntPtr(&HFFFF) 'broadcast to entire system
Dim Lparam As IntPtr = System.Runtime.InteropServices.Marshal.StringToBSTR("intl")
SendNotifyMessage(HWND_BROADCAST, &H1A, UIntPtr.Zero, Lparam)
System.Runtime.InteropServices.Marshal.FreeBSTR(Lparam)
End Sub
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function SendNotifyMessage(ByVal hWnd As IntPtr, _
ByVal msg As UInt32, _
ByVal wParam As UIntPtr, _
ByVal lParam As IntPtr) As Boolean
End Function
Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End Sub
End Class
Untuk mengatasi ini ada juga yang menggunakan "culture info" atau "my.Application.ChangeCulture" , tapi ini hanya berlaku di aplikasi kita saja.
Code berikut akan mengganti/menetapkan regional setting komputer kita agar sesuai dengan setting aplikasi yg kita buat, jadi ga perlu repot2 menyuruh user mengganti secara manual dari kontrol panel, dan ga perlu kuatir si USEr pekok lupa menggantinya, karena setiap aplikasi jalan, otomatissss komputer mengubah regional setting yg kita tetapkan,,
Berikut Codenya :
Imports System.Runtime.InteropServices
Public Class Form1
Private USASettings As New List(Of RegionalSettings)
Private UKSettings As New List(Of RegionalSettings)
Private Class RegionalSettings
Public entry As String
Public value As String
Public Sub New(ByVal key As String, ByVal value As String)
Me.entry = key : Me.value = value
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With USASettings
.Add(New RegionalSettings("iCountry", "1"))
.Add(New RegionalSettings("iCurrDigits", "2"))
.Add(New RegionalSettings("iCurrency", "0"))
.Add(New RegionalSettings("iDate", "1"))
.Add(New RegionalSettings("iDigits", "2"))
.Add(New RegionalSettings("iLZero", "1"))
.Add(New RegionalSettings("iMeasure", "1"))
.Add(New RegionalSettings("iNegCurr", "0"))
.Add(New RegionalSettings("iTime", "0"))
.Add(New RegionalSettings("iTLZero", "0"))
.Add(New RegionalSettings("Locale", "00000409"))
.Add(New RegionalSettings("s1159", "AM"))
.Add(New RegionalSettings("s2359", "PM"))
.Add(New RegionalSettings("sCountry", "United States"))
.Add(New RegionalSettings("sCurrency", "$"))
.Add(New RegionalSettings("sDate", "/"))
.Add(New RegionalSettings("sDecimal", "."))
.Add(New RegionalSettings("sLanguage", "ENU"))
.Add(New RegionalSettings("sList", ","))
.Add(New RegionalSettings("sLongDate", "dddd, MMMM dd, yyyy"))
.Add(New RegionalSettings("sShortDate", "M/d/yyyy"))
.Add(New RegionalSettings("sThousand", ","))
.Add(New RegionalSettings("sTime", ":"))
.Add(New RegionalSettings("sTimeFormat", "h:mm:ss"))
.Add(New RegionalSettings("iTimePrefix", "0"))
.Add(New RegionalSettings("sMonDecimalSep", "."))
.Add(New RegionalSettings("sMonThousandSep", ","))
.Add(New RegionalSettings("iNegNumber", "1"))
.Add(New RegionalSettings("sNativeDigits", "0123456789"))
.Add(New RegionalSettings("NumShape", "1"))
.Add(New RegionalSettings("iCalendarType", "1"))
.Add(New RegionalSettings("iFirstDayOfWeek", "6"))
.Add(New RegionalSettings("iFirstWeekOfYear", "0"))
.Add(New RegionalSettings("sGrouping", "3;0"))
.Add(New RegionalSettings("sMonGrouping", "3;0"))
.Add(New RegionalSettings("sPositiveSign", ""))
.Add(New RegionalSettings("sNegativeSign", "-"))
End With
With UKSettings
.Add(New RegionalSettings("iCountry", "44"))
.Add(New RegionalSettings("iCurrDigits", "2"))
.Add(New RegionalSettings("iCurrency", "0"))
.Add(New RegionalSettings("iDate", "1"))
.Add(New RegionalSettings("iDigits", "2"))
.Add(New RegionalSettings("iLZero", "1"))
.Add(New RegionalSettings("iMeasure", "0"))
.Add(New RegionalSettings("iNegCurr", "1"))
.Add(New RegionalSettings("iTime", "1"))
.Add(New RegionalSettings("iTLZero", "1"))
.Add(New RegionalSettings("Locale", "00000809"))
.Add(New RegionalSettings("s1159", "AM"))
.Add(New RegionalSettings("s2359", "PM"))
.Add(New RegionalSettings("sCountry", "United Kingdom"))
.Add(New RegionalSettings("sCurrency", "£"))
.Add(New RegionalSettings("sDate", "/"))
.Add(New RegionalSettings("sDecimal", "."))
.Add(New RegionalSettings("sLanguage", "ENG"))
.Add(New RegionalSettings("sList", ","))
.Add(New RegionalSettings("sLongDate", "dd MMMM yyyy"))
.Add(New RegionalSettings("sShortDate", "dd/MM/yyyy"))
.Add(New RegionalSettings("sThousand", ","))
.Add(New RegionalSettings("sTime", ":"))
.Add(New RegionalSettings("sTimeFormat", "HH:mm:ss"))
.Add(New RegionalSettings("iTimePrefix", "0"))
.Add(New RegionalSettings("sMonDecimalSep", "."))
.Add(New RegionalSettings("sMonThousandSep", ","))
.Add(New RegionalSettings("iNegNumber", "1"))
.Add(New RegionalSettings("sNativeDigits", "0123456789"))
.Add(New RegionalSettings("NumShape", "1"))
.Add(New RegionalSettings("iCalendarType", "1"))
.Add(New RegionalSettings("iFirstDayOfWeek", "0"))
.Add(New RegionalSettings("iFirstWeekOfYear", "0"))
.Add(New RegionalSettings("sGrouping", "3;0"))
.Add(New RegionalSettings("sMonGrouping", "3;0"))
.Add(New RegionalSettings("sPositiveSign", ""))
.Add(New RegionalSettings("sNegativeSign", "-"))
End With
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each reg As RegionalSettings In UKSettings
Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International", reg.entry, reg.value)
Next
NotifyInternationalChanges()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
For Each reg As RegionalSettings In USASettings
Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Control Panel\International", reg.entry, reg.value)
Next
NotifyInternationalChanges()
End Sub
Private Sub NotifyInternationalChanges()
'Ref: http://msdn.microsoft.com/en-us/library/windows/desktop/ms725497%28v=vs.85%29.aspx
Dim HWND_BROADCAST As New IntPtr(&HFFFF) 'broadcast to entire system
Dim Lparam As IntPtr = System.Runtime.InteropServices.Marshal.StringToBSTR("intl")
SendNotifyMessage(HWND_BROADCAST, &H1A, UIntPtr.Zero, Lparam)
System.Runtime.InteropServices.Marshal.FreeBSTR(Lparam)
End Sub
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function SendNotifyMessage(ByVal hWnd As IntPtr, _
ByVal msg As UInt32, _
ByVal wParam As UIntPtr, _
ByVal lParam As IntPtr) As Boolean
End Function
Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End Sub
End Class