设置系统启动时程序自动运行

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);

posted on 2006-06-24 06:44  路吾  阅读(884)  评论(0编辑  收藏  举报

导航