16,472
社区成员
发帖
与我相关
我的任务
分享
//这里是头文件定义:
public:
void EnumComPort(HKEY hKey, LPCTSTR cstrKey);
//这里是CPP文件函数对应:
void CTestDlg::EnumComPort(HKEY hKey, LPCTSTR cstrKey)
{
static HKEY hLastKey = hKey;
LONG lResult;
DWORD dwIndex =0;
HKEY hCurKey = hKey;
DWORD dwKeyType;
DWORD dwKeyDataLength,dwKeyNameLen;
LPBYTE pbbinKeyData = NULL;
TCHAR *tcKeyName = NULL;
TCHAR tcDataType[1024] = _T("");
lResult = RegOpenKeyEx(hCurKey, cstrKey, 0, KEY_QUERY_VALUE, &hKey);
if(lResult != ERROR_SUCCESS)
return;
DWORD lNoOfValues = 0;
DWORD lLongestKeyNameLen = 1;
DWORD lLongestDataLen = 1;
lResult = RegQueryInfoKey(hKey, NULL, NULL, NULL,NULL, NULL, NULL,&lNoOfValues, &lLongestKeyNameLen, &lLongestDataLen, NULL, NULL);
if(lResult != ERROR_SUCCESS)
return;
hLastKey = hKey;
lLongestKeyNameLen++;
lLongestDataLen++;
tcKeyName = new TCHAR[lLongestKeyNameLen];
pbbinKeyData = new BYTE[lLongestDataLen];
CString cstrFinalData,cstrTemp;
while(TRUE)
{
memset(pbbinKeyData, 0, lLongestDataLen);
memset(tcKeyName, 0, lLongestKeyNameLen);
dwKeyType = dwKeyDataLength = dwKeyNameLen = 0;
dwKeyNameLen = lLongestKeyNameLen;
dwKeyDataLength = lLongestDataLen;
lResult = RegEnumValue(hKey, dwIndex, tcKeyName, &dwKeyNameLen, NULL, &dwKeyType, pbbinKeyData, &dwKeyDataLenght);
if(lResult == ERROR_NO_MORE_ITEMS)
break;
AddRegistryItem(tcKeyName, dwKeyType, pbbinKeyData, dwKeyDataLength, dwIndex);
dwIndex++;
}
RegCloseKey(hKey);
delete tcKeyName;
delete pbbinKeyData;
/*
HKEY hkey;// HKEY_LOCAL_MACHINE;
char sz[256]={0};
DWORD dwtype, sl = 256;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", NULL, KEY_ALL_ACCESS, &hkey);
RegQueryValueEx(hkey, "\\Device\\Serial0", NULL, &dwtype, (LPBYTE)sz, &sl);
RegCloseKey(hkey);
AfxMessageBox((LPCSTR)sz);//AfxGetMainWnd()->m_hWnd,
*/
}