要实现程序开机启动,其实就是要在系统的注册表中添加相应的信息,包括你想要自动启动的程序的路径。在这里有四个与系统注册表相关的API函数:RegOpenKey、RegSetValueEx、RegDeleteValue、RegCloseKey。这四个函数的功能从他们的字面意思就可以猜得到,分别是,打开注册表、写入信息、删除信息和关闭注册表。下面来看下这四个函数的声明:
LONG RegOpenKey( HKEY hKey, // 要打开键的句柄
LPCTSTR lpSubKey, // 要打开子键的名字的地址
PHKEY phkResult // 要打开键的句柄的地址);
第一个参数是使用“regedit”实用程序打开注册表看到的左边的几个值的其中一个;第二个参数是相关的对应子键的地址,这里我们使用的是“SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run”,第三个参数是函数返回的HKEY的地址,这个参数是函数在执行成功后得到的控制子键的句柄。
LONG WINAPI RegSetValueExA (
HKEY hKey,//上面函数的第三个参数的值
LPCSTR lpValueName,//想要设置的子键的名字
DWORD Reserved,//系统保留,必须为0
DWORD dwType,//子键的类型,字符串对应为REG_SZ
CONST BYTE* lpData,//子键的值,这里为程序的路径
DWORD cbData//子键值的大小(字节为单位)
);LONG WINAPI RegDeleteValue(
HKEY hKey,//子键的句柄
LPCTSTR lpValueName//子键的名字,上面函数的第二个参数
);
LONG WINAPI RegCloseKey(HKEY hKey );下面是我的一段设置开机自启动的源代码:
void CXXX::OnClickAutoLogin() { // TODO: Add your control notification handler code here UpdateData(TRUE); //程序自动运行 char svPath[MAX_PATH]; ::GetModuleFileName(NULL,svPath,sizeof(svPath)); HKEY hKey; RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hKey); if(m_bAutoLogin) RegSetValueEx(hKey,"我的开机程序",0,REG_SZ,(unsigned char*)svPath,strlen(svPath)); else RegDeleteValue(hKey,"我的开机程序"); RegCloseKey(hKey); }
VC实现程序开机启动
最新推荐文章于 2019-01-08 00:09:35 发布