您的位置:首页 > 其它

修改注册表,自动运行程序

2007-07-22 09:09 369 查看
在注册表分支HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run下建立一个字符串String型子键,名字不要重复就可以

,其内容为你想在启动时运行的程序全路径。这样就会自动在启动时运行。
  HKEY   hKEY;   
  CString   KeyTree = /"SOFTWARE////Microsoft////Windows////CurrentVersion////Run/"; //主鍵   
  CString   MainKey=/"KillWindow/";                   //子键   
  CString   NewData=/"要启动文件名/";               //子键新值   
  long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,KeyTree,0,KEY_WRITE,&hKEY));   
  if(ret0!=ERROR_SUCCESS)   
  {   
    AfxMessageBox(/"error/");   
    return;   
  }   
  LPBYTE   Data=CStringToLPBYTE(NewData);     
  DWORD   DataSize=NewData.GetLength()+1;   
  DWORD   type=REG_SZ;   
   long   ret1=::RegSetValueEx(hKEY,MainKey,NULL,type,Data,DataSize);   
  if(ret1!=ERROR_SUCCESS)   
  {   
    AfxMessageBox(/"设置自动运行错误!/");   
    return;   
  }   
  delete   Data;   
  ::RegCloseKey(hKEY);

为什么要用C语言写注册表?C语言没有这样的函数啊!   
int   CreateRun(void)//修改注册表,自动运行程序   
{   
   HKEY hKey;  
   char WinExe[256];//执行文件自己的路径   
   char xePath[256];   
   int i;   
   char *pbuf;   
   pbuf=GetCommandLine();   
   
   strcpy(WinExe,pbuf+1);   
   for(i=(int)strlen(WinExe);i>=0;i--)   
   {   
      if(WinExe==/'/"/')   
      {   
         WinExe = 0;   
         i = -10000;   
      }   
   }      
   
   //   get   running   path   
   strcpy(ExePath,WinExe);   
   for(i=(int)strlen(WinExe);i>=0;i--)   
   {   
      if(WinExe==/'/////')   
      {   
          ExePath[i+1] = 0;   
          i = -10000;   
      }   
   }  
   
   if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,/"SOFTWARE////Microsoft////Windows////CurrentVersion////Run/"
         ,0,KEY_WRITE, &hKey)!=ERROR_SUCCESS)  
            return   -1;   
   if(RegSetValueEx(hKey,/"Five32/",0,REG_SZ,(const unsigned char *)WinExe,strlen(pval)+1)!=ERROR_SUCCESS)   
   {   
       RegCloseKey(hKey);   
       return -1;   
   }   
   RegCloseKey(hKey);   
   return   0;   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 delete string path null c