VC 注册表操作
来源:互联网 发布:sql server 2005 sp3 编辑:程序博客网 时间:2024/05/21 22:41
1.打开已经存在的键:
LONG RegOpenKeyEx(
HKEY hKey, // 需要打开的主键的名称
LPCTSTR lpSubKey, //需要打开的子键的名称
DWORD ulOptions, // 保留,设为0
REGSAM samDesired, // 安全访问标记,也就是权限
PHKEY phkResult // 得到的将要打开键的句柄
);
参数意义:
hKey [输入] 当前打开或者以下预定义的键。 lpSubKey [输入] 指向一个非中断字符串包含将要打开键的名称。如果参数设置为NULL 或者指向一个空字符串,过程将打开一个新的句柄由hKey参数确定的值。这种情况下,过程不会关闭先前已经打开的句柄。 ulOptions 保留,必须设置为 0samDesired [输入] 对指定键希望得到的访问权限的访问标记。phkResult [输出] 指向一个被打开键返回的句柄的指针。当不再需要句柄,必须调用 RegCloseKey 关闭它。返回值: 如果过程执行成功,返回值是 ERROR_SUCCESS。 如果功能失败,返回一个非零值,错误码在 Winerror.h 定义。可以使用 FormatMessage 函数 和 FORMAT_MESSAGE_FROM_SYSTEM 标记获得一个分类的错误描述。
2.创建新的键:
LONG WINAPI RegCreateKey( __in HKEY hKey, __in_opt LPCTSTR lpSubKey, __out PHKEY phkResult);
参数意义参考RegOpenKeyEx 。
3.获取和设置键值:
LONG WINAPI RegGetValue( //从注册表中取出一个值 __in HKEY hkey, __in_opt LPCTSTR lpSubKey, __in_opt LPCTSTR lpValue, __in_opt DWORD dwFlags, __out_opt LPDWORD pdwType, __out_opt PVOID pvData, __inout_opt LPDWORD pcbData);
LONG RegSetValueEx( //设置注册表值
HKEY hKey,
LPCTSTR lpValueName,
DWORD Reserved,
DWORD dwType,
CONST BYTE *lpData,
DWORD cbData
);4.删除键值:
LONG RegDeleteValue(
HKEY hKey, //待打开的预定义键
LPCTSTR lpSubKEY //欲删除的键名
);5.删除键:
LONG WINAPI RegDeleteKeyEx( __in HKEY hKey, __in LPCTSTR lpSubKey, __in REGSAM samDesired, __reserved DWORD Reserved);6.重命名键:NTSTATUS NtRenameKey( __in HANDLE KeyHandle, //需要重命名的键,键的打开方式必须有KEY_WRITE权限 __in PUNICODE_STRING NewName //键的新名字,只是键的新名字,不需要带路径);
说明:使用NtRenameKey函数并不在头文件中,使用它需要引用“Ntdll.lib” 。7.列举注册表项及键值LONG RegEnumKeyEx( //枚举指定项下方的子项 HKEY hKey, DWORD dwIndex, LPWSTR lpName, LPDWORD lpcName, LPDWORD lpReserved, LPWSTR lpClass, LPDWORD lpcbClass, PFILETIME lpftLastWriteTime );
LONG WINAPI RegEnumValue( //枚举指定项的值 __in HKEY hKey, __in DWORD dwIndex, __out LPTSTR lpValueName, __inout LPDWORD lpcchValueName, __reserved LPDWORD lpReserved, __out_opt LPDWORD lpType, __out_opt LPBYTE lpData, __inout_opt LPDWORD lpcbData);
LONG RegQueryInfoKey( //获取与一个项有关的信息 HKEY hKey, LPWSTR lpClass, LPDWORD lpcbClass, LPDWORD lpReserved, LPDWORDlpcSubKeys, LPDWORD lpcbMaxSubKeyLen, LPDWORD lpcbMaxClassLen, LPDWORD lpcValues, LPDWORD lpcbMaxValueNameLen, LPDWORD lpcbMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime );
8.关闭注册表键:LONG RegCloseKey( HKEY hKey // 释放已经打开的注册表句柄);
示例代码: 创建注册表键值:DWORD SetRegistry(char *szRegPort, char *szKey, char *szValue){ char ValueName[128]; HKEY hkPort; DWORD cbData = 256; DWORD retCode, dwDisp; if ((retCode=RegCreateKeyEx(HKEY_LOCAL_MACHINE, szRegPort, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkPort, &dwDisp)) == ERROR_SUCCESS) { lstrcpy(ValueName, szKey); retCode = RegSetValueEx(hkPort, // Key handle returned from RegOpenKeyEx. ValueName, // Name of value. 0, //reserved , must be null REG_SZ, // Type of data. (PBYTE)szValue, // Data buffer. strlen(szValue)); // Size of data buffer. RegCloseKey(hkPort); } return retCode;}查询注册表键:DWORD QueryRegistry(char *szRegPort, char *szKey, char *szValue){ char ValueName[128]; HKEY hkPort; BYTE bData[256]; // in registry the max length is banner user name DWORD cbData = 256; DWORD retCode; DWORD dwType=REG_SZ; if ((retCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szRegPort, 0, KEY_EXECUTE, &hkPort)) == ERROR_SUCCESS) { lstrcpy(ValueName, szKey); retCode = RegQueryValueEx (hkPort, // Key handle returned from RegOpenKeyEx. ValueName, // Name of value. NULL, //reserved , must be null &dwType, // Type of data. bData, // Data buffer. &cbData); // Size of data buffer. if (retCode == ERROR_SUCCESS) { strcpy(szValue,(const char*)bData); } RegCloseKey(hkPort); } return retCode;}注册表实现开机自启动://写入注册表,开机自启动 HKEY hKey; //找到系统的启动项 LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; //打开启动项Key long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey); if(lRet == ERROR_SUCCESS) { char pFileName[MAX_PATH] = {0}; //得到程序自身的全路径 DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH); //添加一个子Key,并设置值 lRet = RegSetValueEx(hKey, "WorkAssist", 0, REG_SZ, (BYTE *)pFileName, dwRet); //关闭注册表 RegCloseKey(hKey); if(lRet != ERROR_SUCCESS) { AfxMessageBox("系统参数错误,不能随系统启动"); } }
- VC操作注册表
- VC操作注册表
- VC 注册表操作(转载)
- VC 注册表操作
- vc++注册表操作
- [VC++]注册表简单操作
- VC注册表简单操作
- VC读写注册表操作
- VC操作注册表
- VC++6.0注册表操作
- VC操作注册表
- VC操作注册表
- VC 注册表操作
- vc++注册表操作
- vc简单操作注册表
- VC操作注册表函数
- VC操作注册表函数
- VC操作注册表
- MFC原创教程:3.0 Menu
- 线程安全和可重入的比较
- SQL Query to get Oracle Menus & Functions
- 在linux下利用nohup来后台运行java程序
- iphone ios 如何使用gcd,block
- VC 注册表操作
- 10步让你成为更优秀的程序员
- UT-Exynos4412开发板三星ARM四核旗舰开发平台android4.0体验-7GPS功能调试支持
- java读书杂记
- VMware 宿主机没插网线无法与虚拟机通讯如何解决?
- iOS开发视频教程 UI部分:8、沙盒机制(概述)
- C++ 入门 函数调用,函数指针学习小记
- YUV YCbCr 区别
- ztree 使用小结 (两级联动)