设置系统启动时程序自动运行
UpdateData(true);
const TCHAR gcszAutoRunKey[]= _T( "Software\\microsoft\\windows\\currentversion\\run" );
const TCHAR gcszWindowClass[] = _T("我的程序");//设置开机程序自启动键值位置和其下新建子键值(可设为程序名)
HKEY hKey;
LONG lRet, lRet2;
DWORD dwLength, dwDataType;
TCHAR szItemValue[MAX_PATH], szPrevValue[MAX_PATH];
TCHAR szBuffer[MAX_PATH];
GetModuleFileName( NULL, szItemValue, MAX_PATH ); // 得到程序全路径名
//MessageBox(szItemValue);
lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, gcszAutoRunKey,0, KEY_READ | KEY_WRITE, &hKey );
if( lRet != ERROR_SUCCESS ) // 打开注册表键
MessageBox("设置自动启动失败,请检查注册表是否被禁用!","使闹钟",MB_OK| MB_ICONEXCLAMATION);
dwLength = sizeof( szBuffer );
lRet = RegQueryValueEx( hKey, gcszWindowClass,NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
// 查询自动运行项目是否存在
if( m_bAutoRun ) // 添加
{
if( lRet != ERROR_SUCCESS ) // 自动运行项目不存在
lRet2 = RegSetValueEx( hKey, gcszWindowClass,0, REG_SZ, (LPBYTE)szItemValue, strlen( szItemValue ) );
else // 存在, 比较二者是否相同
{
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gcszWindowClass,0, &dwDataType,(LPBYTE)szPrevValue, &dwLength );
if( lstrcmp( szItemValue, szPrevValue ) ) // 不相同则替换
{
lRet2 = RegDeleteValue( hKey, gcszWindowClass );
lRet2 = RegSetValueEx( hKey, gcszWindowClass,0, REG_SZ,(LPBYTE)szItemValue, strlen( szItemValue ) );
}
}
}
else // 删除
if( lRet == ERROR_SUCCESS )
lRet2 = RegDeleteValue( hKey, gcszWindowClass ); // 自动运行项目已存在则删除
RegCloseKey( hKey ); // 关闭注册表键
if( lRet2 != ERROR_SUCCESS )
MessageBox("设置自动启动失败,请检查注册表是否被禁用!","使闹钟",MB_OK| MB_ICONEXCLAMATION);