最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#通過(guò)Win32API設(shè)置客戶端系統(tǒng)時(shí)間的方法詳解

 更新時(shí)間:2024年06月21日 10:13:57   作者:老碼識(shí)途呀  
在日常工作中,有時(shí)可能會(huì)需要獲取或修改客戶端電腦的系統(tǒng)時(shí)間,比如軟件設(shè)置了Licence有效期,本文以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述如何通過(guò)C#獲取和設(shè)置客戶端電腦的系統(tǒng)時(shí)間,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正,需要的朋友可以參考下

在日常工作中,有時(shí)可能會(huì)需要獲取或修改客戶端電腦的系統(tǒng)時(shí)間,比如軟件設(shè)置了Licence有效期,預(yù)計(jì)2024-06-01 00:00:00到期,如果客戶手動(dòng)修改了客戶端電腦時(shí)間,往前調(diào)整了一年,則軟件就可以繼續(xù)使用一年,如此循環(huán)往復(fù),則Licence將形同虛設(shè)。所以有時(shí)候需要校驗(yàn)客戶端電腦時(shí)間和服務(wù)器端時(shí)間,是否一致,如果不一致,則需要修改客戶端電腦時(shí)間或進(jìn)行系統(tǒng)提示。本文以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述如何通過(guò)C#獲取和設(shè)置客戶端電腦的系統(tǒng)時(shí)間,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。

涉及知識(shí)點(diǎn)

在windows系統(tǒng)中,設(shè)置系統(tǒng)時(shí)間,主要通過(guò)win32提供的API來(lái)實(shí)現(xiàn),如下所示:

  • SetLocalTime 設(shè)置系統(tǒng)的本地化時(shí)間
  • GetLocalTime 獲取系統(tǒng)的本地化時(shí)間
  • SetSystemTime 設(shè)置系統(tǒng)的Utc時(shí)間
  • GetSystemTime 獲取系統(tǒng)的Utc時(shí)間

核心代碼

時(shí)間結(jié)構(gòu)體

在上述四個(gè)系統(tǒng)函數(shù)中,都需要一個(gè)時(shí)間類型的結(jié)構(gòu)體,包含時(shí)分秒,年月日。如下所示:

[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
	public ushort wYear;
	public ushort wMonth;
	public ushort wDayOfWeek;
	public ushort wDay;
	public ushort wHour;
	public ushort wMinute;
	public ushort wSecond;
	public ushort wMilliseconds;
 
	public override string ToString()
	{
		return $"{wYear}-{wMonth}-{wDay} {wHour}:{wMinute}:{wSecond}.{wMilliseconds}";
	}
}

系統(tǒng)時(shí)間幫助類

為了方便調(diào)用,將4個(gè)系統(tǒng)函數(shù)進(jìn)行封裝到一個(gè)類中SysTimeHelper,如下所示:

public class SysTimeHelper
{
	[DllImport("kernel32.dll")]
	public static extern bool SetSystemTime(ref SystemTime st);
 
	[DllImport("Kernel32.dll")]
	public static extern bool SetLocalTime(ref SystemTime st);
 
	[DllImport("Kernel32.dll")]
	public static extern void GetSystemTime(ref SystemTime st);
 
	[DllImport("Kernel32.dll")]
	public static extern void GetLocalTime(ref SystemTime st);
 
	public static string GetLocalTime()
	{
		SystemTime st = new SystemTime();
		GetLocalTime(ref st);
		return st.ToString();
	}
 
	public static bool SetLocalTimeByStr(string timestr)
	{
		bool flag = false;
		SystemTime sysTime = new SystemTime();
		DateTime dt = Convert.ToDateTime(timestr);
		sysTime.wYear = Convert.ToUInt16(dt.Year);
		sysTime.wMonth = Convert.ToUInt16(dt.Month);
		sysTime.wDay = Convert.ToUInt16(dt.Day);
		sysTime.wHour = Convert.ToUInt16(dt.Hour);
		sysTime.wMinute = Convert.ToUInt16(dt.Minute);
		sysTime.wSecond = Convert.ToUInt16(dt.Second);
		try
		{
			flag = SetLocalTime(ref sysTime);
		}
		catch (Exception ex)
		{
			string e = ex.Message;
			return false;
		}
		return flag;
	}
 
	/// <summary>        
	/// 時(shí)間戳轉(zhuǎn)為C#格式時(shí)間        
	/// </summary>        
	/// <param name=”timeStamp”></param>        
	/// <returns></returns>        
	public static DateTime ConvertStringToDateTime(string timeStamp)
	{
		DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
		long lTime = long.Parse(timeStamp + "0000");
		TimeSpan toNow = new TimeSpan(lTime);
		return dtStart.Add(toNow);
	}
 
	/// <summary>
	/// 時(shí)間戳轉(zhuǎn)為C#格式時(shí)間10位
	/// </summary>
	/// <param name="timeStamp">Unix時(shí)間戳格式</param>
	/// <returns>C#格式時(shí)間</returns>
	public static DateTime GetDateTimeFrom1970Ticks(long curSeconds)
	{
		DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
		return dtStart.AddSeconds(curSeconds);
	}
 
 
}

函數(shù)調(diào)用

在頁(yè)面調(diào)用時(shí),即可通過(guò)SysTimeHelper幫助類,進(jìn)行獲取和修改系統(tǒng)時(shí)間。如下所示:

public partial class MainWindow : Window
{
	public MainWindow()
	{
		InitializeComponent();
	}
 
	private void Window_Loaded(object sender, RoutedEventArgs e)
	{
		var time = SysTimeHelper.GetLocalTime();
		this.txtTime.Text = time;
	}
 
	private void Button_Click(object sender, RoutedEventArgs e)
	{
		var time = this.txtTime.Text;
		bool flag = SysTimeHelper.SetLocalTimeByStr(time);
		if(flag)
		{
			MessageBox.Show("設(shè)置成功");
		}
		else
		{
			MessageBox.Show("設(shè)置失敗");
		}
	}
}

實(shí)例演示

通過(guò)VS運(yùn)行程序,在打開(kāi)程序時(shí),獲取時(shí)間,然后手動(dòng)修改時(shí)間,點(diǎn)擊設(shè)置,如下所示:

如果設(shè)置過(guò)后,想要回復(fù),可通過(guò)設(shè)置頁(yè)面【同步時(shí)鐘】進(jìn)行恢復(fù),如下所示:

注意,如果在調(diào)試時(shí),設(shè)置失敗【SetLocalTime返回false】,可通過(guò)【以管理員身份運(yùn)行】的方式打開(kāi)Visual Studio,如下所示:

或者直接通過(guò)【以管理員身份運(yùn)行】啟動(dòng)程序,如下所示:

以上就是C#通過(guò)Win32API設(shè)置客戶端系統(tǒng)時(shí)間的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于C# Win32API系統(tǒng)時(shí)間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#基于時(shí)間輪調(diào)度實(shí)現(xiàn)延遲任務(wù)詳解

    C#基于時(shí)間輪調(diào)度實(shí)現(xiàn)延遲任務(wù)詳解

    在很多.net開(kāi)發(fā)體系中開(kāi)發(fā)者在面對(duì)調(diào)度作業(yè)需求的時(shí)候一般會(huì)選擇三方開(kāi)源成熟的作業(yè)調(diào)度框架來(lái)滿足業(yè)務(wù)需求,但是有些時(shí)候可能我們只是需要一個(gè)簡(jiǎn)易的延遲任務(wù)。本文主要分享一個(gè)簡(jiǎn)易的基于時(shí)間輪調(diào)度的延遲任務(wù)實(shí)現(xiàn),需要的可以參考一下
    2022-12-12
  • C#實(shí)現(xiàn)Log4Net日志分類和自動(dòng)維護(hù)實(shí)例

    C#實(shí)現(xiàn)Log4Net日志分類和自動(dòng)維護(hù)實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)Log4Net日志分類和自動(dòng)維護(hù),實(shí)例講述了Log4Net日志分類和自動(dòng)維護(hù)的實(shí)現(xiàn)方法,并提供了完整的實(shí)例供大家參考學(xué)習(xí),需要的朋友可以參考下
    2014-10-10
  • 基于C#實(shí)現(xiàn)語(yǔ)音識(shí)別功能詳解

    基于C#實(shí)現(xiàn)語(yǔ)音識(shí)別功能詳解

    在.NET4.0中,可以借助System.Speech組件讓電腦來(lái)識(shí)別我們的聲音。本文將利用該組件實(shí)現(xiàn)語(yǔ)音識(shí)別功能,文中實(shí)現(xiàn)過(guò)程講解詳細(xì),需要的可以參考一下
    2022-04-04
  • WPF自定義選擇年月控件詳解

    WPF自定義選擇年月控件詳解

    這篇文章主要為大家詳細(xì)介紹了WPF自定義選擇年月控件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序

    C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#集合Collections購(gòu)物車Shopping Cart(實(shí)例講解)

    C#集合Collections購(gòu)物車Shopping Cart(實(shí)例講解)

    下面小編就為大家分享一篇C#集合Collections購(gòu)物車Shopping Cart的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • C#中的隊(duì)列Queue<T>與堆棧Stack<T>

    C#中的隊(duì)列Queue<T>與堆棧Stack<T>

    這篇文章介紹了C#中的隊(duì)列Queue<T>與堆棧Stack<T>,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#編程:List.ForEach與foreach循環(huán)的對(duì)比分析

    C#編程:List.ForEach與foreach循環(huán)的對(duì)比分析

    這篇文章主要介紹了C#編程:List.ForEach與foreach循環(huán)的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • C#流程控制詳解

    C#流程控制詳解

    這篇文章主要介紹了C#流程控制詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • C#異步下載文件

    C#異步下載文件

    這篇文章主要介紹了C#異步下載文件的相關(guān)資料,需要的朋友可以參考下
    2016-01-01

最新評(píng)論

义乌市| 疏勒县| 安平县| 卫辉市| 乐业县| 循化| 呼伦贝尔市| 曲沃县| SHOW| 临高县| 鲁甸县| 汉阴县| 南岸区| 长海县| 礼泉县| 台中县| 无锡市| 左贡县| 响水县| 盘锦市| 潞西市| 崇左市| 丰台区| 手机| 舟山市| 商城县| 博白县| 龙井市| 兴业县| 新疆| 榆林市| 无棣县| 屏东市| 康马县| 长沙县| 普陀区| 赤壁市| 泰和县| 清苑县| 吐鲁番市| 伊通|