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);
                }
            }
     
     
        }
    }

  • 相关阅读:
    go包之logrus显示日志文件与行号
    linux几种快速清空文件内容的方法
    (转)CSS3之pointer-events(屏蔽鼠标事件)属性说明
    Linux下source命令详解
    控制台操作mysql常用命令
    解决beego中同时开启http和https时,https端口占用问题
    有关亚马逊云的使用链接收集
    favicon.ico--网站标题小图片二三事
    js获取url协议、url, 端口号等信息路由信息
    (转) Golang的单引号、双引号与反引号
  • 原文地址:https://www.cnblogs.com/binbinxiang/p/3032050.html
Copyright © 2011-2022 走看看