c++ - 从 Windows 注册表中读取 Timezoneinfo (C++)
问题描述
我正在尝试使用以下代码从 Windows 注册表中读取 TIME_ZONE_INFORMATION 结构:
void GetTimeZoneInfo(){
TIME_ZONE_INFORMATION tz = {0};
TIME_ZONE_INFORMATION tz_data={0};
char *keyname="TZI";
DWORD size = sizeof(tz_data);
HKEY hk = NULL;
char *zone_key = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Central Standard Time";
if ((RegOpenKeyExA(HKEY_LOCAL_MACHINE, zone_key, 0, KEY_READ, &hk) == ERROR_SUCCESS))
{
if(RegQueryValueExA(hk, keyname, NULL, NULL, (LPBYTE) &tz_data, &size) == ERROR_SUCCESS)
{ /*Control enters here*/
/*Read the data*/
cout<<"Successful in retrieving the value"<<endl;
tz.Bias = tz_data.Bias;
tz.DaylightBias = tz_data.DaylightBias;
tz.DaylightDate = tz_data.DaylightDate;
tz.StandardBias = tz_data.StandardBias;
tz.StandardDate = tz_data.StandardDate;
}
else{ cout<<"Failure in retrieving the value"<<endl;}
}
else { cout<<"RegOpenKey Failure!"<<endl;}
}
它将所有值设置为零,但在运行 RegOpenKeyExA 和 RegQueryValueExA 时看不到任何错误。TIME_ZONE_INFORMATION 作为类型存储在注册表中:REG_BINARY
这是从注册表读取的正确方法吗?
解决方案
根据MS docs TZI 密钥包含以下时区信息:
typedef struct _REG_TZI_FORMAT
{
LONG Bias;
LONG StandardBias;
LONG DaylightBias;
SYSTEMTIME StandardDate;
SYSTEMTIME DaylightDate;
} REG_TZI_FORMAT;
您正在阅读错误的结构 - TIME_ZONE_INFORMATION。
推荐阅读
- ios - 如何准确检测是否在 Swift 4 中的 UILabel 中单击了链接?
- javascript - 如何在 ES5 中将参数传递给父构造函数
- c# - 身份验证限制扩展标头大小
- vbscript - 复制网页中的所有文本并使用 vbscript 粘贴到创建的带有时间戳的文本文件中
- python - Dialogflow RPC Python 字典
- python - 在 Django 模板中使用 url
- java - 可变对象的安全发布
- java - 声纳构建因在项目 xxxxx 上显示而失败:sonar.profile 已设置为 'YYYY' 但与任何语言的任何配置文件都不匹配
- javascript - 如何在视频中添加超链接
- multithreading - Qt. interactiing with gui from another thread