台式电脑连接无线驱动:VC++查询注册表问题?

来源:百度文库 编辑:高考问答 时间:2024/05/05 21:44:28
请看下列代码:
CString szKeyName1="System\\CurrentControlSet\\Control\\Keyboard Layouts\\00000804";
CString szKeyName2="System\\CurrentControlSet\\Control\\Keyboard Layouts\\e00e0804";
CString szKeyName3="System\\CurrentControlSet\\Control\\Keyboard Layouts\\e00f0804";
CString szKeyName4="System\\CurrentControlSet\\Control\\Keyboard Layouts\\e0050804";

szKeyName6="System\\CurrentControlSet\\Control\\Keyboard Layouts\\e0020804";
CString szKeyName7="System\\CurrentControlSet\\Control\\Keyboard Layouts\\e0030804";
CString DWORD lpT=REG_SZ;
HKEY hKey1=NULL;HKEY hKey2=NULL; HKEY hKey3=NULL;HKEY hKey4=NULL;HKEY hKey6=NULL;HKEY hKey7=NULL;HKEY
DWORD cp1=100,cp2=100;
char lp1[100],lp2[100],lp3[100],lp4[100],lp6[100],lp7[100],
CString ID;
if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName1,&hKey1)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey1,"Layout text",NULL,NULL,(LPBYTE)lp1,&cp1)==ERROR_SUCCESS)
m_1=lp1;//m_1="中文 (简体) - 美式键盘")

}
::RegCloseKey(hKey1);
if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName2,&hKey2)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey2,"Layout text",NULL,NULL,(LPBYTE)lp2,&cp2)==ERROR_SUCCESS)
m_2=lp2;//m_2=中文 (简体) - 微软拼音输入法 3.0

}
::RegCloseKey(hKey2);
if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName3,&hKey3)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey3,"Layout text",NULL,&lpT,(LPBYTE)lp3,&cp1)==ERROR_SUCCESS)
m_3=lp3;//金山英文写作助手
}
::RegCloseKey(hKey3);
if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName4,&hKey4)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey4,"Layout text",NULL,NULL,(LPBYTE)lp4,&cp1)==ERROR_SUCCESS)
m_4=lp4;//m_4为什么为空?应为:“中文 (简体) - 内码”
//我单独运行此条件中的代码时确得到正确的结果:中文 (简体) - 内码
//为什么会像着样?
}
::RegCloseKey(hKey4);

}
if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName6,&hKey1)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey1,"Layout text",NULL,&lpT,(LPBYTE)lp1,&cp1)==ERROR_SUCCESS)
m_6=lp1;//m_6=中文 (简体) - 双拼
}
if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName7,&hKey7)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey1,"Layout text",NULL,&lpT,(LPBYTE)lp7,&cp1)==ERROR_SUCCESS)
m_7=lp7;//为什么为m_7=中文 (简体) - 双拼,不为“中文 (简体) - 郑码”?

}
UpdateData(0);

关于中文 (简体) - 内码,好象没有什么问题,不知道你的注册表对不对!
-------------------------------------------------------------
if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName7,&hKey7)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey1,"Layout text",NULL,&lpT,(LPBYTE)lp7,&cp1)==ERROR_SUCCESS)
m_7=lp7;
}
中应该为 hKey1 --》 hKey7
-------------------------------------------------------------
查出来了:
RegQueryValueEx(hKey3,"Layout text",NULL,&lpT,(LPBYTE)lp3,&cp1)
中的cp1不仅是输入的值,而且还是输出值。所以cp1在这个函数后就已经修改过了。长度小于后来的字符长度,所以字符无法写入,产生了空的结果。
应该在每次使用前重新赋值 cp1 = 100;

你的代码太长了,把最核心的给出来。
不然懒得看