问题描述
- 如何用VC读取注册表二进制值,比如ShutdownTime?求助~
-
用RegQueryValueEx读取数据,应该放在哪种数据类型中呢,求有效代码~
下面这段是自己的提取TypedURLsTime的代码。不知问题在哪。。
int main()
{
HKEY hKey;
DWORD lpType = REG_BINARY;
BYTE time[64];
DWORD timeSize = sizeof(time);
RegOpenKeyEx(HKEY_CURRENT_USER, "SoftwareMicrosoftInternet ExplorerTypedURLsTime", 0, KEY_ALL_ACCESS, &hKey);//打开键。
RegQueryValueEx(hKey, "url1", NULL, &lpType, (LPBYTE)time, &timeSize);//提取内容。
printf("%s", time);
system("pause");
}
解决方案
#include
#include
#include //调用FILIETIME等函数。
int main()
{
HKEY hKey;
DWORD lpType = REG_BINARY;
DWORD timeSize;
if (RegOpenKeyEx(HKEY_CURRENT_USER, "SoftwareMicrosoftInternet ExplorerTypedURLsTime", 0, KEY_ALL_ACCESS, &hKey) == 0)//打开键。
{
RegQueryValueEx(hKey, "url1", NULL, &lpType, NULL, &timeSize);
DWORD time = new DWORD[timeSize];
if (RegQueryValueEx(hKey, "url1", NULL, &lpType, (LPBYTE)time, &timeSize) == 0)
{
LONGLONG *t = (LONGLONG)time;//强制类型转换将地址赋给LONGLONG型。
LONGLONG time1 = *t;//time1为注册表中存储的二进制时间。
FILETIME filetime;//filetime为UTC。
filetime.dwHighDateTime = time1 >> 32;//filetime的前半段。
filetime.dwLowDateTime = time1 & 0xffff;//filetime的后半段。
FILETIME localfiletime;//localfiletime为UTC+8。
FileTimeToLocalFileTime(&filetime, &localfiletime);
SYSTEMTIME systemtime;
FileTimeToSystemTime(&localfiletime, &systemtime);
printf("时间为:n%d年%d月%d日%d时%d分%d秒n", systemtime.wYear, systemtime.wMonth, systemtime.wDay, systemtime.wHour, systemtime.wMinute, systemtime.wSecond);
}
}
system("pause");
}
解决方案二:
判断一下返回值,看是不是执行成功了,返回0表示成功,其他值表示有错误。RegOpenKeyEx,RegQueryValueEx这两个的返回值都判断一下
解决方案三:
反正你读取出来的的数据就是byte数组,至于它们具体数据怎么组织的,你就需要知道这个key的定义了,或者自己摸索规律。
解决方案四:
http://stackoverflow.com/questions/3437367/regqueryvalueex-and-reg-binary