20170910WindowsPrj06_注册表操作

来源:互联网 发布:慕课平台有哪些 知乎 编辑:程序博客网 时间:2024/05/17 13:13

注册表操作:

1:文件,格式是可以自定义的,txt,ini等,但是,这些文件都是可以直接用记事本打开的,但是,如果我们自定义一个类型为*.lv,那么操作系统就不知道如何打开了,但是我们写入的都是字符等,本质上,就是个文本文件,可以直接用记事本打开。
2:当打开这样的文件的时候,通常我们使用打开方式,选择默认程序,然后选择记事本才能打开,但是,实际上,这样的设置在Windows里面,是记录在注册表里面的,注册表里面记录了很多类型文件类型的打开方式。

注册表内容简介:

1:注册表里面包含了五个部分(五大组建):
    HKEY_CLASSES_ROOT:里面包含的全部是计算机里面文件类型,关联程序的信息。
    HKEY_CURRENT_USER:当前用户配置的信息,东西比较多,桌面,启动项,等等。
    HKEY_LOCAL_MACHINE:当前计算机的软硬件信息
    HKEY_USERS:所有的USER信息
    HKEY_CURRENT_CONFIG:硬件配置信息
2:每个组建下面有很多子键,键里面有各种各样的项,项里面有自己的数据,数据类型一般分为几种,包含字符型(REG_SZ),还有REG_INT,等等,其中有一个REG_BINARY,可以存储二进制。项里面的数据是非常重要的。
3:操作注册表的API:
RegCreateKeyEx:打开或者创建一个项。特别注意不可使用RegCreateKey,这个AP非常老,已经不再使用。
RegSetValueEx:设置一个项的内容。
RegCloseKey:打开或者创建之后,一定要关闭。
    具体的注册表操作相关的API查询MSDN。
3:下面的程序是将VS软件设置为默认开机自动启动:
#include <iostream>#include <windows.h>#include <tchar.h>bool SetAutoRun(wchar_t* KeyName, wchar_t* FilePath){std::wstring wstrRegPath = L"SOFTWARE\\MicroSoft\\Windows\\CurrentVersion\\Run";HKEY KeyAutoRun;DWORD dwDisposition = REG_OPENED_EXISTING_KEY;bool bRet = false;do{if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_LOCAL_MACHINE, wstrRegPath.c_str(), 0, NULL,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &KeyAutoRun, &dwDisposition))break;if (ERROR_SUCCESS != RegSetValueEx(KeyAutoRun, KeyName, 0, REG_SZ, (BYTE*)FilePath, _tcslen(FilePath)*sizeof(wchar_t)))break;bRet = true;} while (false);if (ERROR_SUCCESS != RegCloseKey(KeyAutoRun))bRet = false;return bRet;}int main(){if (SetAutoRun(L"Visual", L"D:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\devenv.exe"))std::cout << "成功" << std::endl;elsestd::cout << "设置开机启动失败" << std::endl;system("pause");return 0;}

4:此外,在HKEY_CLASSES_ROOT里面,我们发现有很多.开头的子键,这些都是设置文件默认打开软件的,里面还有设置图标等的,如果为64位系统,KEY_ALL_ACCESS并不可获取所有权限,还需要加上KEY_WOW64_32KEY的权限。当然,最好是传递完整的路径,不实用这个权限。

破坏数据罪:

1:注册表的所有修改都是一个不可逆的过程,通常,最好不要随意在自己电脑的注册变里面乱修改,自己测试也最好早虚拟机里面运行。
2:如果自己写的程序随意更改了他人计算机的注册表信息,导致一定的后果,是犯罪行为!!!






原创粉丝点击