[英]Convert REG_BINARY data to REG_TZI_FORMAT
我正在尝试从注册表中提取时区信息,以便可以执行时间转换。 注册表数据类型为REG_BINARY,其中包含有关REG_TZI_FORMAT 结构的信息 。 密钥存储在:HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Windows \\ CurrentVersion \\ Time Zones \\(time_zone_name)
如何获取REG_BINARY信息以转换为REG_TZI_FORMAT结构? C ++,Windows 7 32位,VS 2008
您可以使用以下代码执行此操作:
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
// see http://msdn.microsoft.com/en-us/library/ms724253.aspx for description
typedef struct _REG_TZI_FORMAT
{
LONG Bias;
LONG StandardBias;
LONG DaylightBias;
SYSTEMTIME StandardDate;
SYSTEMTIME DaylightDate;
} REG_TZI_FORMAT;
int main()
{
DWORD dwStatus, dwType, cbData;
int cch;
TCHAR szTime[128], szDate[128];
HKEY hKey;
REG_TZI_FORMAT tzi;
dwStatus = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\E. Europe Standard Time"),
0, KEY_QUERY_VALUE, &hKey);
if (dwStatus != NO_ERROR)
return GetLastError();
cbData = sizeof(REG_TZI_FORMAT);
dwStatus = RegQueryValueEx (hKey, TEXT("TZI"), NULL, &dwType, (LPBYTE)&tzi, &cbData);
if (dwStatus != NO_ERROR)
return GetLastError();
_tprintf (TEXT("The current bias: %d\n"), tzi.Bias);
_tprintf (TEXT("The standard bias: %d\n"), tzi.StandardBias);
_tprintf (TEXT("The daylight bias: %d\n"), tzi.DaylightBias);
// I don't use GetDateFormat and GetTimeFormat to decode
// tzi.StandardDate and tzi.DaylightDate because wYear can be 0
// and in this case it is not real SYSTEMTIME
// see http://msdn.microsoft.com/en-us/library/ms725481.aspx
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.