2010-05-05 59 views
9

是否有一個Windows API可以實現相當於單擊「日期和時間屬性」/「Internet時間」選項卡中的「立即更新」按鈕(通過雙擊時鐘打開任務欄)?Windows API觸發時間同步

有沒有一種方法可以監視何時由Windows觸發時間同步以及何時成功或失敗?

回答

7

時間服務沒有公開API,但要觸發時間同步,可以使用w32tm命令行工具。

在C/C++,你可以做這樣的事情:

include <process.h> 

... 

system("w32tm /resync /nowait"); 

w32tm documentation看看進一步的選項。

+0

不完全是我所需要的,但總比沒有好。謝謝! – 2010-06-10 16:33:17

+0

非常感謝! – 2016-10-15 14:29:32

1

這似乎工作:

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應該能夠獲得上次成功的同步時間。當我有更多時間時,我會繼續努力。