2010-05-05 36 views
9

Có API cửa sổ nào đạt được tương đương với nhấp vào nút "Cập nhật ngay bây giờ" trong tab "Ngày và thời gian"/"Thời gian Internet" (được mở bằng cách nhấp đúp vào đồng hồ trong thanh tác vụ)?API Windows để kích hoạt đồng bộ hóa thời gian

Có cách nào để theo dõi khi đồng bộ hóa thời gian được kích hoạt bởi các cửa sổ và khi nó thành công hay thất bại?

Trả lời

7

Không có API tiếp xúc bởi dịch vụ thời gian, nhưng để kích hoạt đồng bộ hóa thời gian, bạn có thể sử dụng công cụ dòng lệnh w32tm.

Trong C/C++ bạn có thể làm một cái gì đó như thế này:

include <process.h> 

... 

system("w32tm /resync /nowait"); 

Hãy xem w32tm documentation cho các tùy chọn thêm.

+0

Không chính xác những gì tôi cần, nhưng tốt hơn là không có gì. Cảm ơn! –

+0

Cảm ơn một triệu! –

1

Điều này dường như làm việc:

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

Nó cung cấp tài liệu vì vậy tôi không chắc chắn chính xác những gì các lá cờ có thể là, nhưng 8 dường như thực hiện công việc tốt - thử nghiệm với đồng hồ hệ thống của tôi. Nếu bạn đang chạy Windows 64 bit, biên dịch cho 64-bit hoặc bạn sẽ nhận được ngoại lệ vi phạm truy cập.

W32TimeQueryStatus sẽ có thể nhận được thời gian đồng bộ hóa thành công cuối cùng. Tôi sẽ làm việc trên đó khi tôi có nhiều thời gian hơn.

Các vấn đề liên quan