操作注册表让程序开机运行
//是否设置开启开机运行某程序 bool IsEnablePowerOnRunProgram(char *pProgrameName,char *pProgramePathName,unsigned char ucIsCheckSamePathName) { if (NULL == pProgramePathName || 0 == strlen(pProgramePathName) || NULL == pProgrameName || 0 == strlen(pProgrameName)) return false; bool bFind = false; HKEY hRegKey = NULL; LONG lRet = RegOpenKey(HKEY_CURRENT_USER,"SoftwareMicrosoftWindowsCurrentVersionRun",&hRegKey); if (lRet == ERROR_SUCCESS && hRegKey != NULL) { char szValue[MAX_PATH] = { 0 }; DWORD dwSize = MAX_PATH; DWORD dwType = REG_SZ; if (::RegQueryValueEx(hRegKey,pProgrameName,NULL,&dwType,(LPBYTE)szValue,&dwSize) == ERROR_SUCCESS) { if (0 == ucIsCheckSamePathName) { bFind = true; } else { if (strcmp(szValue,pProgramePathName) == 0) { bFind = true; } } } else { //无法查询有关的注册表信息 bFind = false; } RegCloseKey(hRegKey); } return bFind; } //开启开机运行某程序 bool PowerOnRunProgram(char *pProgrameName,char *pProgramePathName) { if (NULL == pProgramePathName || 0 == strlen(pProgramePathName) || NULL == pProgrameName || 0 == strlen(pProgrameName)) return false; //判断文件是否存在 if (!PathFileExists(pProgramePathName)) { return true; } HKEY hRegKey = NULL; LONG lRet = RegOpenKey(HKEY_CURRENT_USER,&hRegKey); if (lRet == ERROR_SUCCESS && hRegKey != NULL) { #ifdef UNICODE lRet = RegSetValueEx(hRegKey,REG_SZ,(const BYTE *)pProgramePathName,_tcslen(pProgramePathName)*2);//这里加上你需要在注册表中注册的内容 #else lRet = RegSetValueEx(hRegKey,_tcslen(pProgramePathName));//这里加上你需要在注册表中注册的内容 #endif RegCloseKey(hRegKey); if (lRet == ERROR_SUCCESS) { return true; } } return false; } //开机不运行某程序 bool PowerOnStopRunProgram(char *pProgrameName,unsigned char ucIsCheckSamePathName) { if (NULL == pProgramePathName || 0 == strlen(pProgramePathName) || NULL == pProgrameName || 0 == strlen(pProgrameName)) return false; HKEY hRegKey = NULL; LONG lRet = 0; lRet = RegOpenKeyEx(HKEY_CURRENT_USER,KEY_QUERY_VALUE | KEY_WRITE,&hRegKey); if (lRet == ERROR_SUCCESS) { bool bIsDeleteFlag = false; if (ucIsCheckSamePathName == 0) { bIsDeleteFlag = true; } else { char szValue[MAX_PATH] = { 0 }; DWORD dwSize = MAX_PATH; DWORD dwType = REG_SZ; if (::RegQueryValueEx(hRegKey,&dwSize) == ERROR_SUCCESS) { if (strcmp(szValue,pProgramePathName) == 0) { bIsDeleteFlag = true; } } } if (bIsDeleteFlag) { lRet = RegDeleteValue(hRegKey,pProgrameName); } RegCloseKey(hRegKey); if (lRet == ERROR_SUCCESS) { return true; } } return false; } 操作注册表,实现开机自启动应用程序。通过写HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER中的SofewareMicrosoftWindowsCurrentVersionRun值。 在admin用户登录权限下C++可将值写入注册表 HKEY_LOCAL_MACHINESofewareMicrosoftWindowsCurrentVersionRun,在非admin用户登录权限下使用管理员权限只能写入到HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRun。实现的效果和admin是一样的。而将值写入注册表 HKEY_LOCAL_MACHINESofewareMicrosoftWindowsCurrentVersionRun,无论是管理员权限还是非管理员权限都可以写入成功。 调用方法: //设置开机运行 if (!IsEnablePowerOnRunProgram(_T("XDemo"),m_szProgramFilePathName,1)) //设置开机不运行 PowerOnStopRunProgram(_T("XDemo"),0); m_szProgramFilePathName为XDemo程序全路径名称。 //执行注册表操作,需要管理员权限,在vs工程中设置。 项目-》XXX 属性-》配置属性-》链接器-》清单文件
UAC执行级别 选择 requireAdministrator
用户帐户控制 (User Account Control)简称UAC,是Windows Vista以及之后操作系统中一组新的基础结构技术,可以帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统,同时也可以帮助组织部署更易于管理的平台。
UAC执行级别在VS里面的设置如下:
注册表HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE等介绍
1、HKEY_CURRENT_USER
包含当前登录用户的配置信息的根目录。用户文件夹、屏幕颜色和“控制面板”设置均存储在此处。该信息被称为用户配置文件。
2、HKEY_USERS
包含计算机上所有用户的配置文件的根目录。HKEY_CURRENT_USER 是 HKEY_USERS 的子项。主要由.DEFAULT子项构成,新用户根据默认用户.DEFAULT子项的配置信息来生成自己配置文件,该配置文件包括环境、屏幕、声音等多种信息。
3、HKEY_LOCAL_MACHINE
包含针对该计算机(对于任何用户)的配置信息。主要由HARDWARE、SAM、SECURITY、SOFTWARE、SYSTEM等项组成:
4、HKEY_CLASSES_ROOT
是HKEY_LOCAL_MACHINESoftware的子项。此处存储的信息可以确保当使用Windows 资源管理器打开文件时,将打开正确的程序。即在HKEY_LOCAL_MACHINESoftwareClasses中或者在HKEY_LOCAL_USERSoftwareClasses中出现的值,如果该信息同时在两处出现,那么HKEY_LOCAL_USERSoftwareClasses拥有优先权。
HKEY_CLASSES_ROOT下的子项可分为两类:一类是已经注册的各类文件的扩展名,这类子项都是以“.”加上扩展名命名的;另一类是各种文件类型的有关信息,这类子项是以字母开头的。
5、HKEY_CURRENT_CONFIG
包含本地计算机在系统启动时所用的硬件配置文件信息,实际上是从两个注册表项创建而来的,即HKEY_LOCAL_MACHINESystem和HKEY_LOCAL_MACHINESoftware。因为此子树是动态创建的,因此修改它的内容没有什么实际意义。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |