我是一个VC的爱好者,在学习过程中,遇到一个问题,请问各位高手:即如何使自己的程序在windows登录界面启动后自动出现?
我指的是进入windows系统以后,自己的程序就启动了,就像QQ的登录界面一样。我想在程序代码中实现这个功能,我猜可能是某个Win32API函数可以实现这个功能,但我查了不少资料,都没找到。可能我的思路也有问题,虚心请教各位高手,恳请指点迷津。万分感谢! 

解决方案 »

  1.   

    很多的,呵呵
    http://www.java-asp.net/vc/200602/t_42299.html
    http://blog.csdn.net/chinawash/archive/2006/12/27/1463749.aspx
    http://topic.csdn.net/t/20041111/09/3542057.html
    http://www.80diy.com/home/20020731/10/912525.html
      

  2.   

    To AzraeLN(@_@):不用编程的方式,这种方法的确有效可行,但是我想用代码实现它。非常感谢你的建议。
    To rockally():你给的4个链接我都仔细的读了,而且用VC++6.0都试了试,可惜我是个VC的菜鸟,Windows系统启动之后,我自己的程序还是无法自行启动,郁闷!
    非常感谢两位的大力帮助,同时也期待着问题早日解决!
      

  3.   

    还是我的问题:进入windows系统以后,自己的程序就自行启动。
    由于水平实在有限,所以我把自己的过程描述一下,恳请各位高人指点!
    我建立一个“ziqidong”的基于对话框的VC工程。根据To rockally()提供的链接,然后把以下代码加入BOOL CZiqidongApp::InitInstance()函数中://写入注册表,开机自启动 
    HKEY hKey; 
    //找到系统的启动项 
    LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 
    //打开启动项Key 
    long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey); 
    if(lRet == ERROR_SUCCESS) 

        char pFileName[MAX_PATH] = {0}; 
        //得到程序自身的全路径 
        DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH); 
        //添加一个子Key,并设置值 
        lRet = RegSetValueEx(hKey, "WorkAssist", 0, REG_SZ, (BYTE *)pFileName, dwRet); 
        //关闭注册表 
        RegCloseKey(hKey); 
        if(lRet != ERROR_SUCCESS) 
        { 
            AfxMessageBox("系统参数错误,不能随系统启动"); 
        } 
    }然后我把RegSetValueEx函数中的第2个参数"WorkAssist"改成了我的“ziqidong”,最后编译、运行,重启系统,效果并没有出现。
    请问各位高人:问题出在哪里?是我把这段代码加入的位置不对,还是哪里有不妥的地方?恳请指点一二!
      

  4.   

    HMODULE GetModuleHandle(
          LPCTSTR   lpModuleName // module name   
      );   
    传递NULL获取当前进程的模块句柄hModule
    DWORD   GetModuleFileName(   
          HMODULE   hModule,     //   handle to module   
          LPTSTR   lpFilename,   //   file name of module   
          DWORD   nSize          // size of buffer   
      );   
    再用GetModuleFileName传递模块句柄hModule获取路径
    再用注册表相关函数如:
    RegCreateKeyEx
    RegOpenKeyEx
    RegQueryValueEx
    RegSetValueEx
    RegCloseKey
    将其写入注册表启动项:
    如:
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
    或者:[HKEY_CURRENT_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
      

  5.   

    to mdc630():
    我将你的代码拷贝了一份,在我的Vc 6.0上测试了一下,完全可以自启动的。呵呵。
    要不你写全路径试试:
    LPCTSTR lpRun = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 
    你在运行中输入"regedit",看注册表响应位置(run里)有没有你的可执行文件路径,有就成功了。!
      

  6.   

    To rockally:非常感谢你的热心,更感激你的耐心,对我过于简单的问题耐心指导。我按你说的办法去做了,可是仍然出不来所要自启动的效果。即使写了全路径仍是不行,运行“regedit”,run里根本没有我的可执行文件路径!后来,我想,改成HKEY_CURRENT_USER行不行,试了一下,也没效果,run里也没有我的可执行文件路径!究竟怎么回事?你运行,有效果,我怎么就不行呢?崩溃!
      

  7.   

    非常感谢rockally()的大力帮助,问题终于圆满解决,同时也向rockally()学习了不少东西!对rockally()的热心与耐心致以深深的谢意!最后,对帖子里面帮助我这个新手的每一位高人致以十二分的感谢!!!