zoukankan      html  css  js  c++  java
  • SetLocalInfo修改系统时间,立即生效

    SetLocalInfo修改系统时间后,必须重启机器才能生效。为了能够立即生效,需要广播一次消息,

    使用SetLocaleInfo()函数设置完后,要使用PostMessage()函数(此API在USER32.dll中)向系统广播该消息:WM_SETTINGCHANGE,这样才能让系统重新读取注册表信息并更新!

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Globalization;
    using System.Runtime.InteropServices;
    using Microsoft.Win32;
     
     
    namespace ConsoleApplication1
    {
        class Program
        {
     
            [DllImport("kernel32.dll", EntryPoint = "GetSystemDefaultLCID")]
            public static extern int GetSystemDefaultLCID();
     
            [DllImport("kernel32.dll", EntryPoint = "SetLocaleInfoA")]
            public static extern int SetLocaleInfo(int Locale, int LCType, string lpLCData);
     
            [DllImport("user32.dll", EntryPoint = "SendMessage")]
            public static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
     
            const int WM_SETTINGCHANGE = 0x001A;
            const int HWND_BROADCAST = 0xffff;
            public const int LOCALE_SSHORTDATE = 0x1F;
     
            static void Main(string[] args)
            {
     
     
                DateTimeFormatInfo dtfi = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
     
                string orginalFormatStr = dtfi.ShortDatePattern.ToString();
                Console.WriteLine("Show default: " + dtfi.ShortDatePattern);
     
                SetTimeFormat("yyyy/MMM/dd");
                SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0); 
     
                dtfi = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
                Console.WriteLine("Show change: " + dtfi.ShortDatePattern);
     
                SetTimeFormat(orginalFormatStr);
                dtfi = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
                Console.WriteLine("Show recovery: " + dtfi.ShortDatePattern);
                Console.ReadLine();
            }
     
     
     
            public static void SetTimeFormat(string dateFormat)
            {
                try
                {
                    int x = GetSystemDefaultLCID();
                    SetLocaleInfo(x, LOCALE_SSHORTDATE, dateFormat);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
     
     
        }
    }

  • 相关阅读:
    ASP.NET使用UEditor入门与常见问题
    关于发布者策略程序集学习记录
    Myeclipse 10安装,以及Flex4插件(原)
    IE、Chrome等浏览器实现PDF预览(原)
    Oracle数据库中文显示乱码的最简单解决办法
    关于程序集的结构(2)C#和.NET2.0实战学习笔记
    关于AppDomain
    关于强名称程序集 C#和.NET2.0实战学习记录
    数据库查询·聚合分支格式化日期·思维导图&要点&误点(含示例)
    如何在SERVER2003上安装MySQL?(附安装教程及资源地址)
  • 原文地址:https://www.cnblogs.com/binbinxiang/p/3032050.html
Copyright © 2011-2022 走看看