簡體   English   中英

將REG_BINARY數據轉換為REG_TZI_FORMAT

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM