代碼如下:
int ReadRegisteTable(int rootflag, int pathflag, char* destname) { // 讀取注冊表有創建
int i;
HKEY hrootkey; // 根鍵值
LPCTSTR lpSubKey; // 子鍵值路徑
HKEY hKey; // 打開注冊表項保存資訊
BOOL bResult = TRUE;
DWORD lResult;
if (rootflag == 1)
hrootkey = HKEY_LOCAL_MACHINE;
else if (rootflag == 2)
hrootkey = HKEY_CURRENT_USER;
if (pathflag == 1)
lpSubKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\";
else if (pathflag == 2)
lpSubKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\";
lResult = RegOpenKeyEx(hrootkey, lpSubKey, 0, KEY_WOW64_32KEY|KEY_QUERY_VALUE | KEY_READ ,
&hKey);
if (lResult != ERROR_SUCCESS) { // 打開鍵值失敗
return -1;
}
// 開始枚舉鍵值
for (i = 0; ; i++)
{
fout << "in xunhuan i = " << i << "\n";
TCHAR szValueName[_MAX_PATH + 1];
DWORD dwValueName = sizeof(szValueName);
TCHAR value[_MAX_PATH + 1];
DWORD valuelong = sizeof(value);
DWORD dwValueType;
lResult = RegEnumValue(hKey, i, szValueName, &dwValueName, 0,
&dwValueType, value, &valuelong);
// 259并非錯誤
// If there are no more values available,
// the function returns ERROR_NO_MORE_ITEMS.
if (lResult != ERROR_SUCCESS)
{
if (lResult != ERROR_NO_MORE_ITEMS)
{
bResult = FALSE;
}
break;
}
String tempstrname(szValueName);
String tempstrvalue(value);
if (strstr(value, ".exe") != NULL)
{
StrCopy(destname, value);
break; // 找到推出回圈
}
}
RegCloseKey(hKey);
return 0; // 成功回傳
}
RegOpenKeyEx打開注冊表是呼叫成功的,但是注冊表列舉的時候直接就是回傳259,代表的意思就是ERROR_NO_MORE_ITEMS,RegEnumValue也沒錯,但是我看了注冊表里面明顯是一項欄位值的.為什么會這樣?求大神指教..測驗環境是xp系統...求大嬸了..急急急!!!!!!!
uj5u.com熱心網友回復:
大嬸求關注...上面急著要...
uj5u.com熱心網友回復:
自己頂
uj5u.com熱心網友回復:
為什么沒人...
uj5u.com熱心網友回復:
引數型別,賦初值uj5u.com熱心網友回復:
注冊表里面有一種 REG_EXPAND_SZ ,是屬于長度可變的資料串。該資料型別包含在程式或服務使用該資料時確定的變數。REG_SZ 和 REG_EXPAND_SZ 的區別是:
REG_SZ 型別的鍵值中存在的可擴展占位符 %xxx% 不會被系統解釋,會真實的回傳;
REG_EXPAND_SZ 型別的鍵值中存在的 %xxx% 的部分會被系統解釋,變成實際代表的值,比如max_path有可能被解釋成260回傳。
也有可能是二進制資料,存到類似char中后其中的/0后面的資料被忽略了
uj5u.com熱心網友回復:
樓主的程式沒怎么看,不知道是否有問題轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/94393.html
上一篇:二叉排序樹的實作
