以下是一个注册表写入字符串列子,该程序从ANSI转向Unicode不过为什么程序执行后,显示出来的字符却不是完整的
在参数上输入C:\123.TXT 后却只有 “C” 一个字符呢?
LPBYTE SetContent_S; //字符串类型
int SetValue_S (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,LPBYTE ReSetContent_S);//设置字符串值函数
int SetValue_S (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,LPBYTE ReSetContent_S)
{
int i=0; //操作结果:0==succeed
//int StrLength;
//StrLength=CString(SetContent_S).GetLength(); if(RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&hKey)==ERROR_SUCCESS)
{
if(RegSetValueEx(hKey,ReValueName,NULL,REG_SZ,ReSetContent_S,CString(SetContent_S).GetLength()*2)!=ERROR_SUCCESS)
{
AfxMessageBox(L"错误:无法设置有关的注册表信息");
i=1;
}
RegCloseKey(hKey);
}
else
{
AfxMessageBox(L"错误:无法查询有关的注册表信息");
i=1;
}
return i;
}void CRegDemoDlg::OnSetValue_S()
{
// TODO: Add your control notification handler code here
RootKey=HKEY_CURRENT_USER; //注册表主键名称
SubKey=L"Software\\Microsoft"; //欲打开注册表值的地址
ValueName=L"例1"; //欲设置值的名称
SetContent_S=LPBYTE(L"成功"); //值的内容
CString tempstr = L"成功";
if((SetValue_S(RootKey,SubKey,ValueName,SetContent_S))!=0)
AfxMessageBox(L"操作失败!");
}
在参数上输入C:\123.TXT 后却只有 “C” 一个字符呢?
LPBYTE SetContent_S; //字符串类型
int SetValue_S (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,LPBYTE ReSetContent_S);//设置字符串值函数
int SetValue_S (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,LPBYTE ReSetContent_S)
{
int i=0; //操作结果:0==succeed
//int StrLength;
//StrLength=CString(SetContent_S).GetLength(); if(RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&hKey)==ERROR_SUCCESS)
{
if(RegSetValueEx(hKey,ReValueName,NULL,REG_SZ,ReSetContent_S,CString(SetContent_S).GetLength()*2)!=ERROR_SUCCESS)
{
AfxMessageBox(L"错误:无法设置有关的注册表信息");
i=1;
}
RegCloseKey(hKey);
}
else
{
AfxMessageBox(L"错误:无法查询有关的注册表信息");
i=1;
}
return i;
}void CRegDemoDlg::OnSetValue_S()
{
// TODO: Add your control notification handler code here
RootKey=HKEY_CURRENT_USER; //注册表主键名称
SubKey=L"Software\\Microsoft"; //欲打开注册表值的地址
ValueName=L"例1"; //欲设置值的名称
SetContent_S=LPBYTE(L"成功"); //值的内容
CString tempstr = L"成功";
if((SetValue_S(RootKey,SubKey,ValueName,SetContent_S))!=0)
AfxMessageBox(L"操作失败!");
}
解决方案 »
- 如何使一个窗口嵌入在另一个窗口中显示???
- 有没有好的vc2550代码编辑插件,或好的代码编辑方法推荐一下?
- 关于TabControl控件发消息给父DLG实现“应用”按钮功能
- (昨天的刚结)太阳又出来了,再次散分!!!!
- 谁有Iphlpapi.h,Iphlpapi.lib ,急需,谢谢!
- 关于内存绘图的效率
- 请教一个vc++技术内幕(第四版,潘爱民译)中的问题
- 谁有opc的源代码,急需中,多谢。
- 问一下大家,看源码的时候应该怎么分析?
- 如何让对话框显示在屏幕的左上角。
- ActiveX控件中使用CreateOleObject创建其他COM对象时出错。请高手赐教。
- MFC ActiveX控件 能实现这样的功能吗?大家帮忙,多谢!
RegSetValueEx(hKey,ReValueName,NULL,REG_SZ,ReSetContent_S,CString(SetContent_S).GetLength()*2)这条语句不要这样写,可以这样写:
如果你的工程是UNICODE编码的RegSetValueEx(hKey,ReValueName,NULL,REG_SZ,ReSetContent_S,wcslen((WCHAR*)ReSetContent_S))如果你的工程是多字节编码的RegSetValueEx(hKey,ReValueName,NULL,REG_SZ,ReSetContent_S,strlen((char*)ReSetContent_S))
LPCTSTR SetContent_S; //字符串类型
int SetValue_S (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,LPCTSTR ReSetContent_S);//设置字符串值函数
int SetValue_S (struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReValueName,LPCTSTR ReSetContent_S)
{
int i=0; //操作结果:0==succeed
//int StrLength;
//StrLength=CString(SetContent_S).GetLength(); if(RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&hKey)==ERROR_SUCCESS)
{
if(RegSetValueEx(hKey,ReValueName,NULL,REG_SZ,(CONST BYTE *)ReSetContent_S,(_tcslen(SetContent_S) + 1) * sizeof(TCHAR))!=ERROR_SUCCESS)
{
AfxMessageBox(L"错误:无法设置有关的注册表信息");
i=1;
}
RegCloseKey(hKey);
}
else
{
AfxMessageBox(L"错误:无法查询有关的注册表信息");
i=1;
}
return i;
}void CRegDemoDlg::OnSetValue_S()
{
// TODO: Add your control notification handler code here
RootKey=HKEY_CURRENT_USER; //注册表主键名称
SubKey=L"Software\\Microsoft"; //欲打开注册表值的地址
ValueName=L"例1"; //欲设置值的名称
SetContent_S=LPCTSTR(L"成功"); //值的内容
CString tempstr = L"成功";
if((SetValue_S(RootKey,SubKey,ValueName,SetContent_S))!=0)
AfxMessageBox(L"操作失败!");
}
可是 输入 C:\\123GFG.txt 时 确只显示 C:\GFG.txt