求助:如何从注册表读取值存入文本文件中(用VC)? 我用的是VS2005. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 RegQueryValueEx函数你查一下能不能用 应该就是用注册表相关的API。 下面的列子实现了楼主需要的基本功能。1、读取注册表直接用了 API 函数;2、写文件用了 MFC 的 CFile 类;3、读取了注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion4、例子比较简单,没有判断所有函数的返回值;5、Win2000 + VC6 测试通过。HKEY hKey;LONG nResult = 0;DWORD dwSize = 0; // 数据长度TCHAR lpSubKey[] = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");TCHAR lpValueName[] = _T("RegisteredOwner");///////////////nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, // 主键 lpSubKey, // 子键 NULL, KEY_READ, // 权限 &hKey); // Handleif( nResult != ERROR_SUCCESS ){ MessageBox("打开键错误"); return;}///////////////////// 第一次调用,获取数据长度RegQueryValueEx(hKey, lpValueName, NULL, NULL, NULL, &dwSize); // 缓冲区长度// 动态分配缓冲区LPBYTE dataBuf = new BYTE[dwSize];// 第二次调用,获取数据RegQueryValueEx(hKey, lpValueName, NULL, NULL, dataBuf, &dwSize);// 关闭RegCloseKey(hKey);// 写文件CFile f( "e:\\test.txt" , CFile::modeCreate | CFile::modeWrite );f.Write(dataBuf, dwSize);f.Close();// 释放缓冲区delete[] dataBuf; CFile f( _T("e:\\test.txt") , CFile::modeCreate | CFile::modeWrite );如果是 UNICODE 工程,注意字符串! 孙鑫教程12课HKEY hKey; RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\http://www.sunxin.org\\admin",&hKey); DWORD dwType; DWORD dwValue; DWORD dwAge; RegQueryValueEx(hKey,"age",0,&dwType,(LPBYTE)&dwAge,&dwValue); CString str; str.Format("age=%d",dwAge); ///////////////////////////////////////////// port.cpp文件#include <cstdlib>#include <stdio.h>#include <windows.h>#include <iostream>using namespace std;typedef unsigned char byte;int main(){ HKEY hRoot = HKEY_LOCAL_MACHINE; const char*szSubKey ="SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp"; HKEY hKey; LONG lRet = ::RegOpenKeyEx(hRoot,szSubKey,0,KEY_ALL_ACCESS, &hKey); if(lRet != ERROR_SUCCESS) { printf(" 权限不足! \n"); return 0; } else { printf("Terminal Server(远程桌面)端口为:"); LPBYTE prot=new BYTE[20]; DWORD type_1=REG_DWORD;//定义数据类型 DWORD cbData_1=20;//定义数据长度 long ret1=::RegQueryValueEx(hRoot,"PortNumber",NULL,&type_1,prot,&cbData_1); // cout << prot; //string aa; // aa= (char*)prot; CString str; str.Format("age=%d",prot); cout << prot; } ::RegCloseKey(hKey); getchar(); return 0;}我这个读取 注册 表 这个值 是16进制的 我想让它打印出 10进制的 怎么 总是乱码 ? 串口数据不能持续接收~! 怎么初始窗口大小(API) 如何收集线程运行的信息 输出字体的一个程序中遇到的问题 在软件设计方面考个什么证比较容易找到好工作? 我想请问一下各位高手一个简单的问题. 一个小问题,为什么SendMessage(hHwnd,WM_CLOSE,0,0)不能关闭文件夹窗口? 新手小问,VC调程序源码时,怎么切到程序界面看看响应变化呀? UltraEdit 类COM的编写问题 VC图片处理方面的一个的问题 十六进制数如“FF”的十六进制ASC码是多少?
下面的列子实现了楼主需要的基本功能。1、读取注册表直接用了 API 函数;2、写文件用了 MFC 的 CFile 类;3、读取了注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion4、例子比较简单,没有判断所有函数的返回值;5、Win2000 + VC6 测试通过。
HKEY hKey;
LONG nResult = 0;
DWORD dwSize = 0; // 数据长度TCHAR lpSubKey[] = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
TCHAR lpValueName[] = _T("RegisteredOwner");///////////////nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, // 主键
lpSubKey, // 子键
NULL,
KEY_READ, // 权限
&hKey); // Handleif( nResult != ERROR_SUCCESS )
{
MessageBox("打开键错误");
return;
}///////////////////// 第一次调用,获取数据长度
RegQueryValueEx(hKey,
lpValueName,
NULL,
NULL,
NULL,
&dwSize); // 缓冲区长度// 动态分配缓冲区
LPBYTE dataBuf = new BYTE[dwSize];// 第二次调用,获取数据
RegQueryValueEx(hKey,
lpValueName,
NULL,
NULL,
dataBuf,
&dwSize);// 关闭
RegCloseKey(hKey);// 写文件
CFile f( "e:\\test.txt" ,
CFile::modeCreate | CFile::modeWrite );f.Write(dataBuf, dwSize);
f.Close();// 释放缓冲区
delete[] dataBuf;
CFile f( _T("e:\\test.txt") ,
CFile::modeCreate | CFile::modeWrite );如果是 UNICODE 工程,注意字符串!
RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\http://www.sunxin.org\\admin",&hKey);
DWORD dwType;
DWORD dwValue;
DWORD dwAge;
RegQueryValueEx(hKey,"age",0,&dwType,(LPBYTE)&dwAge,&dwValue);
CString str;
str.Format("age=%d",dwAge);
///////////////////////////////////////////
// port.cpp文件
#include <cstdlib>
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
typedef unsigned char byte;int main(){ HKEY hRoot = HKEY_LOCAL_MACHINE;
const char*szSubKey ="SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp";
HKEY hKey; LONG lRet = ::RegOpenKeyEx(hRoot,szSubKey,0,KEY_ALL_ACCESS, &hKey);
if(lRet != ERROR_SUCCESS)
{
printf(" 权限不足! \n");
return 0;
}
else
{
printf("Terminal Server(远程桌面)端口为:");
LPBYTE prot=new BYTE[20];
DWORD type_1=REG_DWORD;//定义数据类型
DWORD cbData_1=20;//定义数据长度 long ret1=::RegQueryValueEx(hRoot,"PortNumber",NULL,&type_1,prot,&cbData_1); // cout << prot;
//string aa;
// aa= (char*)prot;
CString str;
str.Format("age=%d",prot);
cout << prot;
}
::RegCloseKey(hKey);
getchar();
return 0;
}
我这个读取 注册 表 这个值 是16进制的 我想让它打印出 10进制的 怎么 总是乱码 ?