Windows系统编程 教学课件 ppt 作者 李晓黎 第6章

上传人:E**** 文档编号:89400726 上传时间:2019-05-24 格式:PPT 页数:35 大小:516.50KB
返回 下载 相关 举报
Windows系统编程 教学课件 ppt 作者  李晓黎 第6章_第1页
第1页 / 共35页
Windows系统编程 教学课件 ppt 作者  李晓黎 第6章_第2页
第2页 / 共35页
Windows系统编程 教学课件 ppt 作者  李晓黎 第6章_第3页
第3页 / 共35页
Windows系统编程 教学课件 ppt 作者  李晓黎 第6章_第4页
第4页 / 共35页
Windows系统编程 教学课件 ppt 作者  李晓黎 第6章_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《Windows系统编程 教学课件 ppt 作者 李晓黎 第6章》由会员分享,可在线阅读,更多相关《Windows系统编程 教学课件 ppt 作者 李晓黎 第6章(35页珍藏版)》请在金锄头文库上搜索。

1、,Windows系统编程实用教程,授课教师: 职务:,第6章 探测网络中的在线设备,课程描述 Windows将很多系统配置信息保存在注册表中,通过读取注册表中的一些键值,可以获取Windows的相应系统信息。比如,服务和安装程序的列表等;通过修改注册表中的一些键值,可以对Windows系统进行配置很多应用程序也把配置信息保存在注册表中。,本章知识点,6.1 注册表的结构和管理 6.2 对注册表键的操作 6.3 对注册表值的操作 6.4 注册表编程实例:安装和卸载程序管理,6.1 注册表的结构,6.1.1注册表的结构 6.1.2 标准注册表值类型,6.1.1 注册表的结构,1HKEY_LOCAL

2、_MACHINE (HKLM) 2HKEY_CURRENT_CONFIG (HKCC) 3HKEY_CLASSES_ROOT (HKCR) 4HKEY_USERS (HKU) 5HKEY_CURRENT_USER (HKCU),注册表编辑器,在“运行”对话框中执行regedit.exe命令,可以打开“注册表编辑器”窗口,如图6.1所示。,6.1.2 标准注册表值类型,6.2 对注册表键的操作,6.2.1 打开和关闭键 6.2.2 创建注册表键 6.2.3 删除注册表键 6.2.4 枚举子键,6.2.1 打开和关闭键,调用RegOpenKeyEx()函数可以打开指定的注册表键并返回其句柄,函数原

3、型如下: LONG WINAPI RegOpenKeyEx( _in HKEY hKey, _in LPCTSTR lpSubKey, DWORD ulOptions, _in REGSAM samDesired, _out PHKEY phkResult );,【例6.1】,使用RegOpenKeyEx()函数判断HKEY_LOCAL_MACHINE下的子键是否存在,如图6.2所示。 创建一个基于对话框的MFC项目RegKeyExists,主对话框对应的类为CRegKeyExistsDlg。在主对话框中添加编辑框控件IDC_EDIT_SUBKEY,并为其添加变量m_SubKey。,CRegK

4、eyExistsDlg:OnInitDialog(),在CRegKeyExistsDlg:OnInitDialog()中为编辑框IDC_EDIT_SUBKEY设置初始值,代码如下: BOOL CRegKeyExistsDlg:OnInitDialog() CDialog:OnInitDialog(); m_SubKey = “SOFTWAREMicrosoftWindowsCurrentVersionUninstall“; UpdateData(0); return TRUE; / 除非将焦点设置到控件,否则返回TRUE ,单击“判断”按钮对应的代码,void CRegKeyExistsDlg

5、:OnBnClickedButtonVerify() UpdateData(TRUE); LONG lRet; HKEY hKey; lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, m_SubKey.GetBuffer(), 0, KEY_QUERY_VALUE, ,6.2.2 创建注册表键,LONG RegCreateKeyEx( HKEY hKey, /一个打开的注册表键的句柄,调用进程对该键必须拥有KEY_CREATE_SUB_KEY权限 LPCWSTR lpSubKey, /在hKey键下创建的子键的名字 DWORD Reserved, / 保留,必须

6、为0 LPWSTR lpClass, /键的类别。如果NULL,则忽略 DWORD dwOptions, /选项, REGSAM samDesired, / 指定对键的访问权限 LPSECURITY_ATTRIBUTES lpSecurityAttributes, /指定安全属性,即返回的句柄是否可以被子进程继承。如果为NULL,则不可以继承 PHKEY phkResult, /用于接收被创建的键的句柄 LPDWORD lpdwDisposition /用于接收穿件的方式。 );,【例6.2】,使用RegCreateKeyEx()函数在HKEY_LOCAL_MACHINESOFTWARE下创建

7、一个子键MyApp,代码如下: #include “stdafx.h“ #include int _tmain(int argc, _TCHAR* argv) HKEY hk; DWORD dwData, dwDisp; char lpSubKeyMAX_PATH = “SOFTWAREMyApp“; if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ,6.2.3 删除注册表键,LONG WINAPI RegDeleteKey( _in HKEY

8、 hKey, / 打开的要删除的键的父键的句柄,用户必须对该键有DELETE访问权限 _in LPCTSTR lpSubKey / 要删除的键名字,它必须是hKey所表示的键的子键 ); 如果函数执行成功,则返回ERROR_SUCCESS;否则返回一个非0错误编码。返回ERROR_FILE_NOT_FOUND表示没有找到要删除的键。,【例6.3】,使用RegDeleteKey()函数删除例6.2中创建的注册表键MyApp,代码如下: #include “stdafx.h“ #include int _tmain(int argc, _TCHAR* argv) HKEY hk; DWORD dw

9、Data, dwDisp; LONG lResult; char lpSubKeyMAX_PATH = “SOFTWAREMyApp“; lResult = RegDeleteKey(HKEY_LOCAL_MACHINE, lpSubKey); if ( lResult!= ERROR_SUCCESS) if (lResult = ERROR_FILE_NOT_FOUND) printf(“Key not found.n“); return TRUE; else printf(“Error opening key.n“); return FALSE; return 0; ,6.2.4 枚举子键

10、,在下面的注册表键下保存着所有已安装软件的信息,每个子键都保存着一个安装软件的信息,如图6.3所示。 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall,RegEnumKey()函数,LONG WINAPI RegEnumKey( _in HKEY hKey, /打开的注册表键句柄,用户对该键必须有KEY_ENUMERATE_SUB_KEYS的访问权限 _in DWORD dwIndex, /指定要获取hKey键的子键的序号 _out LPTSTR lpName, / 用于接收子键名称的字符串缓冲区 _in DWO

11、RD cchName /指定接收缓冲区的大小 );,【例6.3】,枚举并打印HKEY_LOCAL_MACHINESOFTWARE MicrosoftWindows CurrentVersionUninstall的所有子键,代码如下: #include “stdafx.h“ #include int _tmain(int argc, _TCHAR* argv) LONG lRet; HKEY hKey; /打开键HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall lRet = RegOpenKeyEx( HKEY_L

12、OCAL_MACHINE, “SOFTWAREMicrosoftWindowsCurrentVersionUninstall“, 0, KEY_ENUMERATE_SUB_KEYS, ,接上,DWORD dwCurIndex =0; /子键的索引 / 枚举子键 char SubKeyMAX_PATH; while(true) lRet=RegEnumKey(hKey, dwCurIndex, SubKey, MAX_PATH); if(lRet = ERROR_NO_MORE_ITEMS) | (lRet=ERROR_INVALID_HANDLE) break; else printf(“%s

13、n“,SubKey); dwCurIndex+; RegCloseKey(hKey); system(“pause“); return 0; ,【例6.3】的运行界面,6.3 对注册表值的操作,6.3.1 读取注册表值 6.3.2 设置注册表值 6.3.3 删除注册表值,6.3.1 读取注册表值,调用RegQueryValueEx()函数可以读取指定的注册表值,函数原型如下: LONG RegQueryValueEx( HKEY hKey, / 已打开的注册表键句柄 LPCWSTR lpValueName, / 要读取的值的名字 LPDWORD lpReserved, / 保留,使用NULL

14、LPDWORD lpType, / 值的数据类型 LPBYTE lpData, / 用于接收值的数据的缓冲区 LPDWORD lpcbData / 指定缓冲区lpData的长度,单位是字节 ); 如果函数执行成功,则返回ERROR_SUCCESS;否则返回错误代码。,【例6.5】,读取并打印HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NT CurrentVersion键下的ProductName,代码如下: #include “stdafx.h“ #include int _tmain(int argc, _TCHAR* argv) HKEY hKey

15、; / 注册表键 DWORD dwType = REG_SZ; / 值的数据类型 DWORD dwSize; /缓冲区大小 BYTE dataMAX_PATH; /缓冲区 SecureZeroMemory(data, MAX_PATH);,接上,if(RegOpenKey(HKEY_LOCAL_MACHINE, “SOFTWAREMicrosoftWindows NTCurrentVersion“, ,6.3.2 设置注册表值,LONG RegSetValueEx( HKEY hKey, / 已打开的注册表键句柄,要设置的注册表值应在该键下 LPCWSTR lpValueName, /要设置的值的名字 DWORD Reserved, / 保留,使用NULL DWORD dwType, /值的数据类型 const BYTE* lpData, / 用于指定值的数据的缓冲区 DWORD cbData );,【例6.6】,在HKEY_LOCAL_MACHINESOFTWAREMyApp键下创建和设置值ProductName的数据为“MyAppName”,代码如下: #include “stdafx.h“ #include int _tmain(int argc, _TCHAR* argv) HKEY hKey; / 注册表键 DWORD dwT

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号