【发布时间】:2021-10-01 09:57:43
【问题描述】:
【问题讨论】:
-
我不确定是否有 API 可以直接执行此操作,但您始终可以通过注册表执行此操作向下滚动一点here,他们会引导您完成它
【问题讨论】:
这是通过 WinAPI 和注册表的检查方法之一。
我们将寻找HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 值(查看https://techlibrary.hpe.com/docs/otlink-wo/How-to-Configure-a-Local-NTP-Server.html 了解更多信息)。
我们正在寻找一个Enabled 值。
所以,这里有一些未优化的代码并进行了一些检查(希望它有效...):
#include <iostream>
#include <Windows.h>
bool is_ntp_enabled(void)
{
HKEY key;
const auto sub_key{ TEXT("SYSTEM\\CurrentControlSet\\Services\\W32Time\\TimeProviders\\NtpServer") };
if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, sub_key, NULL, KEY_QUERY_VALUE, &key)) {
std::cerr << "No registry access" << std::endl;
return false;
}
DWORD buff;
const DWORD buff_type{ KEY_READ };
const DWORD buff_size{ sizeof(buff) };
if (ERROR_SUCCESS != RegQueryValueEx(key, TEXT("Enabled"), NULL, (LPDWORD)&buff_type, (LPBYTE)&buff, (LPDWORD)&buff_size)) {
std::cerr << "No registry value access" << std::endl;
return false;
}
if (buff == 0)
return false;
else
return true;
}
int main()
{
std::cout << is_ntp_enabled() << std::endl;
}
【讨论】:
WinAPI 更改注册表参数(但这可能很复杂;可能更改一个注册表参数不会启用 NTP 和更新时钟)。但我以前没有这样做,所以我只能祝你好运.. :c