編譯器:Dev-C++
由 msdn 的範例改編而來
#include <windows.h> #include <stdio.h> #include <tchar.h> #define MAX_KEY_LENGTH 255 #define MAX_VALUE_NAME 16383 void QueryKey(HKEY hKey) { TCHAR achKey[MAX_KEY_LENGTH]; // buffer for subkey name DWORD cbName; // size of name string TCHAR achClass[MAX_PATH] = TEXT(""); // buffer for class name DWORD cchClassName = MAX_PATH; // size of class string DWORD cSubKeys=0; // number of subkeys DWORD cbMaxSubKey; // longest subkey size DWORD cchMaxClass; // longest class string DWORD cValues=0; // number of values for key DWORD cchMaxValue; // longest value name DWORD cbMaxValueData; // longest value data DWORD cbSecurityDescriptor; // size of security descriptor FILETIME ftLastWriteTime; // last write time DWORD i, retCode; TCHAR achValue[MAX_VALUE_NAME]; DWORD cchValue = MAX_VALUE_NAME; // Get the class name and the value count. retCode = RegQueryInfoKey( hKey, // key handle achClass, // buffer for class name &cchClassName, // size of class string NULL, // reserved &cSubKeys, // number of subkeys &cbMaxSubKey, // longest subkey size &cchMaxClass, // longest class string &cValues, // number of values for this key &cchMaxValue, // longest value name &cbMaxValueData, // longest value data &cbSecurityDescriptor, // security descriptor &ftLastWriteTime); // last write time if (cValues) { printf( "\nNumber of values: %d\n", cValues); for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) { DWORD a = 40; DWORD cType = REG_SZ; cchValue = MAX_VALUE_NAME; achValue[0] = '\0'; BYTE *pData = new BYTE[40]; retCode = RegEnumValue(hKey,i, achValue, &cchValue, NULL, &cType, pData, &a); if (retCode == ERROR_SUCCESS ) { _tprintf(TEXT("(%d) %s %s\n"), i+1, achValue, pData); } } } } int __cdecl _tmain(void) { HKEY hTestKey, hKey; if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_READ, &hTestKey) == ERROR_SUCCESS ) //if( RegOpenKeyEx( hTestKey, "SERIALCOMM", 0, KEY_READ, &hKey) == ERROR_SUCCESS ) QueryKey(hTestKey); RegCloseKey(hKey); RegCloseKey(hTestKey); system("PAUSE"); return 1; }