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

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

转载于:https://www.cnblogs.com/wangliang651/archive/2006/06/24/434427.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值