c#中

 1 using System.Runtime.InteropServices;
 2 
 3     [DllImport("kernel32.dll", EntryPoint = "GetSystemDefaultLCID")]
 4         public static extern int GetSystemDefaultLCID();
 5 
 6     [DllImport("kernel32.dll", EntryPoint = "SetLocaleInfoA")]
 7         public static extern int SetLocaleInfo(int Locale, int LCType, string lpLCData);
 8 
 9     [DllImport("user32.dll")]
10         public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
11 
12     private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);
13         private const uint WM_SYSCOMMAND = 0x0112;
14         private const int SC_MONITORPOWER = 0xf170;
15         private const int WM_SETTINGCHANGE = 0x001A;
16 
17         public const int LOCALE_SLONGDATE = 0x20;
18         public const int LOCALE_SSHORTDATE = 0x1F;
19         public const int LOCALE_STIME = 0x1003;
20 
21 
22     [Flags]
23         public enum SendMessageTimeoutFlags : uint
24         {
25             SMTO_NORMAL = 0x0000,
26             SMTO_BLOCK = 0x0001,
27             SMTO_ABORTIFHUNG = 0x0002,
28             SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
29         }
30 
31 
32     [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
33         public static extern IntPtr SendMessageTimeout(
34            IntPtr windowHandle,
35            uint Msg,
36            IntPtr wParam,
37            IntPtr lParam,
38            SendMessageTimeoutFlags flags,
39            uint timeout,
40            out IntPtr result
41            );
42 
43 
44 try
45             {
46                 int x = GetSystemDefaultLCID();
47                 SetLocaleInfo(x, LOCALE_STIME, "HH:mm:ss");        //时间格式
48                 SetLocaleInfo(x, LOCALE_SSHORTDATE, "yyyy-MM-dd");   //短日期格式 
49                 SetLocaleInfo(x, LOCALE_SLONGDATE, "yyyy-MM-dd");   //长日期格式 
50                 //SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
51                 IntPtr result1;
52                 //修改后发送一个消息给系统 
53                 //调用
54                 SendMessageTimeout(
55                                      HWND_BROADCAST,
56                                      WM_SETTINGCHANGE,
57                                      IntPtr.Zero,
58                                      IntPtr.Zero,
59                                      SendMessageTimeoutFlags.SMTO_ABORTIFHUNG,
60                                      20,
61                                      out result1);
62 
63             }
64             catch (Exception ex)
65             {
66                 Console.WriteLine(ex);
67             }


如果用sendmessage的话会假死并不会有效果

c++builder中

1 SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,pchar('yyyy-MM-dd')); //短日期
2   SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SLONGDATE,pchar('yyyy-MM-dd'));
3 SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, 0);

就可以了