VS2010下关于Cstring调用读取注册表出错··
写了一个函数
CString m_KeyPath;
HKEY hKey;
DWORD dwType;
DWORD dwValue=100;
m_KeyPath=CString("SYSTEM\\ControlSet001\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\00");
int KeyPathLen=m_KeyPath.GetLength()+2;
int Index=0,Index2=0;
CString pChar;
m_KeyPath.Format(LPCTSTR("%s%d%d"),m_KeyPath,Index,Index2);
RegOpenKey(HKEY_LOCAL_MACHINE,m_KeyPath,&hKey);
RegQueryValueEx(hKey,LPCWSTR("DriverDesc"),0,&dwType,(LPBYTE)(LPCTSTR)pChar,&dwValue);
MessageBox((LPCTSTR)pChar);
就是读取m_KeyPath这个注册表的路径 但是我要遍历{4D36E972-E325-11CE-BFC1-08002BE10318}下面0001到0009 DriverDesc的值,所以我就只取00 format函数配合变动的index和index2的值来控制 m_KeyPath的变化
在VS2010下调试,显示Format之后m_KeyPath变成乱码。index和index2的值
下面是我在VC6.0下通过的代码
BOOL CMyDlg::FindRigthPath()// CString m_KeyPath是在类里面定义了
//m_KeyPath=CString("SYSTEM\\ControlSet001\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\00");
{HKEY hKey;
DWORD dwType;
DWORD dwValue=100;
int KeyPathLen=m_KeyPath.GetLength()+2;
int Index=0,Index2=0;
CString pChar;
char StrTemp='0';
char Buffer[2];
while( Index < 19 && Index2 < 2)
{
m_KeyPath.Format("%s%d%d",m_KeyPath,Index2,Index);
if (ERROR_SUCCESS==RegOpenKey(HKEY_LOCAL_MACHINE,m_KeyPath,&hKey) &&
ERROR_SUCCESS==RegQueryValueEx(hKey,"DriverDesc",0,&dwType,(LPBYTE)(LPCTSTR)pChar,&dwValue))
{
if ( pChar.Find("Ethernet")!=-1 || pChar.Find("Gigabit")!=-1 )
{
//MessageBox("find it!");
m_DriveDesc=pChar;
// MessageBox(m_DriveDesc);
RegCloseKey(hKey);
return TRUE;
}
}
if (++Index>9) Index2=1;
dwValue=100;
m_KeyPath="SYSTEM\\ControlSet001\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\00";
RegCloseKey(hKey);
}
return FALSE;
}