是否有一個Windows API可以實現相當於單擊「日期和時間屬性」/「Internet時間」選項卡中的「立即更新」按鈕(通過雙擊時鐘打開任務欄)?Windows API觸發時間同步
有沒有一種方法可以監視何時由Windows觸發時間同步以及何時成功或失敗?
是否有一個Windows API可以實現相當於單擊「日期和時間屬性」/「Internet時間」選項卡中的「立即更新」按鈕(通過雙擊時鐘打開任務欄)?Windows API觸發時間同步
有沒有一種方法可以監視何時由Windows觸發時間同步以及何時成功或失敗?
時間服務沒有公開API,但要觸發時間同步,可以使用w32tm
命令行工具。
在C/C++,你可以做這樣的事情:
include <process.h>
...
system("w32tm /resync /nowait");
在w32tm documentation看看進一步的選項。
這似乎工作:
using System;
using System.Runtime.InteropServices;
namespace ClockResync
{
class Program
{
[DllImport("w32time.dll")]
public static extern uint W32TimeSyncNow([MarshalAs(UnmanagedType.LPWStr)]String computername, bool wait, uint flag);
static void Main(string[] args)
{
Console.WriteLine(W32TimeSyncNow("computername", true, 8).ToString());
Console.ReadLine();
}
}
}
它無證所以我不能完全確定可能的標誌是什麼,但似乎8做的工作就好了 - 與我的系統時鐘進行測試。如果你正在運行Windows 64位,編譯爲64位或者你會得到訪問衝突異常。
W32TimeQueryStatus
應該能夠獲得上次成功的同步時間。當我有更多時間時,我會繼續努力。
不完全是我所需要的,但總比沒有好。謝謝! – 2010-06-10 16:33:17
非常感謝! – 2016-10-15 14:29:32