VC实现程序开机启动

来源:互联网 发布:先锋网络电视官网 编辑:程序博客网 时间:2024/05/16 11:50


要实现程序开机启动,其实就是要在系统的注册表中添加相应的信息,包括你想要自动启动的程序的路径。

在这里有四个与系统注册表相关的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 hereUpdateData(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));elseRegDeleteValue(hKey,"我的开机程序");RegCloseKey(hKey);}