void XXXX::OnBnClickedAutorunCheckbtn() { //----------------------------------------------- // 通过HKEY_LOCAL_MACHINE//Software//Microsoft//Windows//CurrentVersion//Run // 加入一个自定义键值,并设置数据为当前exe执行路径即可实现开机自动运行 // 清空键值,就可以去掉开机运行,当然也可以删除这个值. // // LONG RegOpenKeyEx(HKEY hKey, // 需要打开的主键的名称 // LPCTSTR lpSubKey, //需要打开的子键的名称 // DWORD ulOptions, // 保留,设为0 // REGSAM samDesired, // 安全访问标记,也就是权限 // PHKEY phkResult // 得到的将要打开键的句柄 // ) // RegSetValueEx:设置一个键值的数据,如果没有这个键值,就创建它. //----------------------------------------------- // 得到exe执行路径. TCHAR tcExePath[MAX_PATH] = {0}; ::GetModuleFileName(NULL, tcExePath, MAX_PATH); // 设置自定义键值名称. #ifndef AUTORUN_APP_NAME #define AUTORUN_APP_NAME (TEXT("hgy test autorun")) #else #endif LPCTSTR lpSubKey = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"); HKEY hKey; if (m_AutoRun.GetCheck()) { if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_WRITE, &hKey)) { //加入一个自定义键值,并设置数据, if (ERROR_SUCCESS == ::RegSetValueEx(hKey, AUTORUN_APP_NAME, 0, REG_SZ, (BYTE*)tcExePath, MAX_PATH)) { } else { AfxMessageBox(TEXT("设置失败")); } ::RegCloseKey(hKey); } } else { #if 1 // 删除值,没有就失败,方法二选一 if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_SET_VALUE, &hKey)) { ::RegDeleteValue(hKey, AUTORUN_APP_NAME); } #endif #if 0 // 清空数据 ::ZeroMemory(tcExePath, MAX_PATH); if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_WRITE, &hKey)) { //加入一个自定义键值,并设置数据 if (ERROR_SUCCESS == ::RegSetValueEx(hKey, AUTORUN_APP_NAME, 0, REG_SZ, (BYTE*)tcExePath, MAX_PATH)) { } else { AfxMessageBox(TEXT("删除失败")); } ::RegCloseKey(hKey); } #endif } }m_AutoRun为checkbox,这是它的响应函数.