VC++程序开机自动启动

时间:2022-09-04 21:28:59
<pre name="code" class="cpp">/****/        
HKEY   RegKey; 
	LPCSTR KeyPath=_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"); 
	//打开Run注册项
	if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,KeyPath,0,KEY_READ|KEY_WRITE,&RegKey)==ERROR_SUCCESS)
	{
		wchar_t lpData[180]; 
		DWORD cbData; 
		DWORD dwType = REG_SZ; 
		char keyValue[]="yourName";
		if(::RegQueryValueEx(RegKey,keyValue,0,&dwType,(LPBYTE)lpData,&cbData) == ERROR_SUCCESS) //已存在
		{
			::RegCloseKey(RegKey);//关闭已经打开的注册项
			return TRUE;//已注册值,返回
		}
		else
		{
			//不存在注册自启动项
			::RegCloseKey(RegKey);//关闭已经打开的注册项
			CString   sPath;   
			GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);     
			if(GetFileAttributes(sPath) != -1)   
			{
				RegKey=NULL;
				::RegOpenKey(HKEY_LOCAL_MACHINE,KeyPath,&RegKey);
				::RegSetValueEx(RegKey,_T("yourName"),0,REG_SZ,(const unsigned char*)(LPCTSTR)sPath,sPath.GetLength());
				this->UpdateData(FALSE);
				::RegCloseKey(RegKey);//关闭已经打开的注册项
				return TRUE;//注册表注册自动启动成功
			}   
			else
			{
				return FALSE; //注册表注册自动启动失败
			}
		}
	}
	else 
	{
		return FALSE;//打开注册表Run项失败
	}