尿酮体半个加号:(VC++)为什么的得不道注册表里面的值?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/03 06:31:35
我要取下列注册表中的 "中文 (简体) - 微软拼音输入法 3.0"作为值
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\E00E0804]
"Layout File"="kbdus.dll"
"Layout Text"="中文 (简体) - 微软拼音输入法 3.0"
"IME File"="pintlgnt.ime"
"Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5091"
"System IME File"="C:\\WINDOWS\\system32\\Pintlgnt.ime"
"Old IME Version"=dword:05031209
"Old IME CodePage"=dword:000004b0
我的VC程序为:
BOOL CMy1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

szKeyName1="System\\CurrentControlSet\\Control\\Keyboard Layouts\\0000084"
szKeyName2 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\e00e084";

DWORD lpT=REG_SZ;
HKEY hKey1=NULL;HKEY hKey2=NULL;
DWORD cp1=100,cp2=100;
char lp1[100],lp2[100];
CString ID,Name1,Name2;

if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName1,&hKey1)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey2,"Layout text",NULL,&lpT,(LPBYTE)lp1,&cp1)==ERROR_SUCCESS)
Name1=lp1;//(运行结果为:Name1="中文 (简体) - 美式键盘")

}

if(RegOpenKey(HKEY_LOCAL_MACHINE,szKeyName2,&hKey2)==ERROR_SUCCESS )
{
if(RegQueryValueEx(hKey2,"Layout text",NULL,&lpT,(LPBYTE)lp2,&cp2)==ERROR_SUCCESS)
Name2=lp2;//(Name2的值为空)为什么为空?为什么不为:中文 (简体) - 微软拼音输入法 3.0

}

UpdateData(0);
return TRUE; // return TRUE unless you set the focus to a control
}
更正:
if(RegQueryValueEx(hKey2,"Layout text",NULL,&lpT,(LPBYTE)lp1,&cp1)==ERROR_SUCCESS)
Name1=lp1;//(运行结果为:Name1="中文 (简体) - 美式键盘")
上面代码中的hKey2应为hKey1;

我试了一下
把这句 if(RegQueryValueEx(hKey2,"Layout text",NULL,&lpT,(LPBYTE)lp1, &cp1)==ERROR_SUCCESS)
中的 hKey2 改成 hKey1 就都可以取得Name1, Name2

不知道你是不是手误(hKey2)
---------------------------------------------------------
szKeyName2 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\e00e084";
我试过的,可以显示
应该是 e00e0804 e00e084