RegQueryValueEx找回所打開注冊表鍵所關聯的一個給定值的類型和數據。
LONG RegQueryValueEx( HKEY hKey, // 要查詢鍵的句柄 LPTSTR lpValueName, // 要查詢值的名字的地址 LPDWORD lpReserved, // 保留 LPDWORD lpType, // 值類型緩存地址 LPBYTE lpData, // 數據緩存地址 LPDWORD lpcbData // 數據緩存大小地址);
參數
- hKey
- 一個當前已打開鍵的句柄或下列已確定的保留句柄值:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
Windows NT: HKEY_PERFORMANCE_DATA
Windows 95和Windows 98: HKEY_DYN_DATA
- lpValueName
- 指向要查詢值的名字的字符串(以空字符結束)。
如果lpValueName是NULL或一個空字符串(""),這個函數找回這個鍵的未命名或默認值的類型和數據。
Windows 95和Windows 98: 每個鍵有一個默認值(最初的不包含數據)。在Windows 95,這人默認值類型總是REG_SZ。在Windows 98,默認鍵的類型最初是REG_SZ,但可以通過RegSetValueEx指定一個默認值為不同的類型。
Windows NT: 鍵不能自動擁有一個未命名或默認的值,未命名的值可以是任何類型。
- lpReserved
- 保留,必須是NULL.
- lpType
- 指向與給定值相關聯數據的類型的變量。這個值將通過這個參數返回,將是下面之一:
值 |
含意 |
REG_BINARY |
二進制數據。 |
REG_DWORD |
一個32位數字。 |
REG_DWORD_LITTLE_ENDIAN |
一個little-endian格式的32位數字。這相當于REG_DWORD。
little-endian格式,是一個多字節值在內存中被從低字節到高字節存貯。如,值 0x12345678在little-endian格式中被存貯為(0x78 0x56 0x34 0x12)。
Windows NT, Windows 95,和Windows 98是有意運行在little-endian計算機體系上的。例如像一些UNIX系統,一個用戶必須連接到big-endian體系的計算機上。
|
REG_DWORD_BIG_ENDIAN |
一個big-endian格式的32位數字。
big-endian格式,一個多字節值在內存職被從高字節到低字節存貯。如,值0x12345678在big-endian格式中被存貯為(0x12 0x34 0x56 0x78)。
|
REG_EXPAND_SZ |
一個包含未被引用的環境變量的以空字符結束的字符串(如,"%PATH%")。它是Unicode字符串還是ANSI字符串將依賴你所使用的是Unicode函數還是ANSI函數。擴展環境變量引用,使用
ExpandEnvironmentStrings函數。 |
REG_LINK |
一個Unicode符號連接。 |
REG_MULTI_SZ |
一個以空字符結束的字符串數組,被兩個null字符結束。 |
REG_NONE |
未定義值類型。 |
REG_RESOURCE_LIST |
一個設備驅動資源列表。 |
REG_SZ |
一個以空字符結束的字符串。它是 Unicode字符串還是 ANSI字符串將依賴你所使用的是 Unicode函數還是 ANSI函數。 |
如果不需要類型lpType參數可以為空(NULL)。
- lpData
- 指定接收值數據的緩存區。如果數據是不需要的這個參數可以為空。
- lpcbData
- 以字節為單位,指向lpData參數所指定地緩存區大小的變量。函數返回復制到lpData的數據大小的變量。
如果數據是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ類型,那么lpcbData還將包括以空字符結束的大小。
如果lpData是NULL,lpcbData參數可以是NULL。
如果被lpData參數指定的緩存不夠大,這個函數返回ERROR_MORE_DATA值,并取回被lpcbData指定的變量緩存的大小(以字節為單位)。
如果lpData是NULL,lpcbData不是NULL,這個函數返回ERROR_SUCCESS,并取回被lpcbData指定的變量緩存的大小(以字節為單位)。這個為值的數據緩存分配最好的途徑。
Window NT: 如果hKey指定為HKEY_PERFORMANCE_DATA,并且lpData緩存太小,RegQueryValueEx返回ERROR_MORE_DATA,但是lpcbData不能返回必需的緩存大小。這是因為運用數據的大小可以在調用的下一步被改變。在這種情形下,你必須增加緩存的大小并重新調用RegQueryValueEx通過lpcbData 參數更新緩存大小。重復直到函數成功。 你需要維護一個單獨的變量去留意緩存的大小。因為被lpcbData返回的值是可不預知的。
返回值
如果這個函數成功,返回ERROR_SUCCESS。
如果調有失敗,返回一個非零錯誤碼(定義在WINERROR.H)。你可以使用帶有FORMAT_MESSAGE_FROM_SYSTEM標記的FormatMessage函數獲得錯誤的普通描述信息。
注意
被hKey確定的鍵必須是被帶有KEY_QUERY_VALUE標記打開的。打開鍵,使用RegCreateKeyEx函數或RegOpenKeyEx函數。
如果值數據是REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ類型,這個函數的ANSI版本將被使用(明確的調用RegQueryValueExA或在包含WINDOWS.H文件前不定義UNICODE),這個函數在復制它到lpData指定的緩存中以前,轉換存貯地Unicode字符串為ANSI字符串。
Window NT: 當調用RegQueryValueEx函數并hKey被設置成HKEY_PERFORMANCE_DATA句柄,給定對象的值字符串時,返回數據結構往往是未定義的對象。不要感到驚訝;這是正常的。當調RegQueryValueEx函數時,you should always expect to walk the returned data structure to look for the requested object.
快速信息
Windows NT: 需要3.1或更高版本。
Windows: 需要Windows 95或更高版本。
Windows CE: 需要1.0或更高版本。
頭文件: winreg.h。
輸入庫: advapi32.lib。
Unicode: 在Windows NT中作為Unicode或ANSI執行。
參見
Registry Overview, Registry Functions,
ExpandEnvironmentStrings, RegCreateKeyEx, RegEnumKey, RegEnumKeyEx, RegEnumValue, RegOpenKeyEx, RegQueryInfoKey, RegQueryValue