wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了操作注册表让程序开机运行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

//是否设置开启开机运行某程序 bool IsEnablePowerOnRunProgram(char *pProgramename, char *pProgramePathName, unsigned char ucIscheckSamePathName) { if (NULL == pProgramePathName || 0 == strlen(pProgramePathName) ||
 
 
//是否设置开启开机运行某程序
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,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&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 bIs@R_452_3673@ = false;
		if (ucIscheckSamePathName == 0)
		{
			bIs@R_452_3673@ = 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)
				{
					bIs@R_452_3673@ = true;
				}
			}
		}
		if (bIs@R_452_3673@)
		{
			lRet = RegdeleteValue(hRegKey,pProgrameName);
		}
		RegCloseKey(hRegKey);
		if (lRet == ERROR_succesS)
		{
			return true;
		}
	}

	return false;
}


 
 

操作注册表,实现开机自启动应用程序。通过写HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER中的Sofeware\Microsoft\Windows\CurrentVersion\Run值。

在admin用户登录权限下C++可将值写入注册表 HKEY_LOCAL_MACHINE\Sofeware\Microsoft\Windows\CurrentVersion\Run,在非admin用户登录权限下使用管理员权限只能写入到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run。实现的效果和admin是一样的。而将值写入注册表 HKEY_LOCAL_MACHINE\Sofeware\Microsoft\Windows\CurrentVersion\Run,无论是管理员权限还是非管理员权限都可以写入成功。

调用方法

//设置开机运行

if (!IsEnablePowerOnRunProgram(_T("XDemo"),m_szProgramFilePathName,1))
{
PowerOnRunProgram(_T("XDemo"),m_szProgramFilePathName);
}

//设置开机不运行

PowerOnStopRunProgram(_T("XDemo"),0)

@H_727_47@m_szProgramFilePathName为XDemo程序全路径名称


//执行注册表操作,需要管理员权限,在vs工程中设置。

项目-》XXX 属性-》配置属性-》链接器-》清单文件

UAC执行级别 选择 requireAdministrator
用户帐户控制 (User Account Control)简称UAC,是Windows Vista以及之后操作系统中一组新的基础结构技术,可以帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统,同时也可以帮助组织部署更易于管理的平台。
UAC执行级别在VS里面的设置如下:
Adminitrator(Adminitrators)

Testuser(Adminitrators)

@H_944_110@Testuser(Users)

用户

asInvoker

highestAvailable

requireAdministrator

成功复制,无提示

成功复制,无提示

失败复制,无提示

成功复制,有提示

成功复制,有提示

提示输入管理员密码


注册表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_MACHINE\Software的子项。此处存储的信息可以确保当使用Windows 资源管理器打开文件时,将打开正确的程序。即在HKEY_LOCAL_MACHINE\Software\Classes中或者在HKEY_LOCAL_USER\Software\Classes中出现的值,如果该信息同时在两处出现,那么HKEY_LOCAL_USER\Software\Classes拥有优先权。
HKEY_CLASSES_ROOT下的子项可分为两类:一类是已经注册的各类文件的扩展名,这类子项都是以“.”加上扩展名命名的;另一类是各种文件类型的有关信息,这类子项是以字母开头的。
5、HKEY_CURRENT_CONfig
包含本地计算机在系统启动时所用的硬件配置文件信息,实际上是从两个注册表项创建而来的,即HKEY_LOCAL_MACHINE\System和HKEY_LOCAL_MACHINE\Software。因为此子树是动态创建的,因此修改它的内容没有什么实际意义。

大佬总结

以上是大佬教程为你收集整理的操作注册表让程序开机运行全部内容,希望文章能够帮你解决操作注册表让程序开机运行所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。