我想一启动机器就自动加载我指定的一个dll,不知道如何才能实现?
最好是比较简单的方法。谢了

解决方案 »

  1.   

    参考<<Windows核心编程》上的使用注册表来插入DLL如果你曾经多少使用过Wi n d o w s操作系统,你肯定熟悉注册表的情况。整个系统的配置都是在注册表中维护的,可以通过调整它的设置来改变系统的行为特性。将要介绍的项目是在下面的关键字中:
    HKEY_LOCAL_MACHINE\Software\Microsoft
       \Windows NT\CurrentVersion\Windows\AppInit_DLLs
    Windows 98将忽略注册表的这个关键字。在Windows 98下,无法使用该方法插入D L L。
    图2 2 - 2显示了使用Registry Editor(注册表编辑器)时该关键字中的各个项目的形式。该关键字的值包含一个D L L文件名或者一组D L L文件名(用空格或逗号隔开)。由于空格用来将文件名隔开,因此必须避免使用包含空格的文件名。列出的第一个D L L文件名可以包含一个路径,但是包含路径的其他D L L均被忽略。由于这个原因,最好将你的D L L放入Wi n d o w s的系统目录中,这样就不必设定路径。在窗口中,我将该值设置为单个D L L路径名C : \ M y L i b . d l l。
     
    图22-2 注册表窗口当重新启动计算机及Wi n d o w s进行初始化时,系统将保存这个关键字的值。然后,当U s e r 3 2 . d l l库被映射到进程中时,它将接收到一个D L L _ P R O C E S S _ AT TA C H通知。当这个通知被处理时,U s e r 3 2 . d l l便检索保存的这个关键字中的值,并且为字符串中指定的每个D L L调用L o a d L i b r a r y函数。当每个库被加载时,便调用与该库相关的D l l M a i n函数,其f d w R e a s o n的值是D L L _ P R O C E S S _ AT TA C H,这样,每个库就能够对自己进行初始化。由于插入的D L L在进程的寿命期中早早地就进行了加载,因此在调用函数时应该格外小心。调用k e r n e l 3 2 . d l l中的函数时应该不会出现什么问题,不过调用其他D L L中的函数时就可能产生一些问题。U s e r 3 2 . d l l并不检查每个库是否已经加载成功,或者初始化是否取得成功。在插入D L L时所用的所有方法中,这是最容易的一种方法。要做的工作只是将一个值添加到一个已经存在的注册表关键字中。不过这种方法也有它的某些不足:&#8226; 由于系统在初始化时要读取这个关键字的值,因此在修改这个值后必须重新启动你的计算机—即使退出后再登录,也不行。当然,如果从这个关键字的值中删除D L L,那么在计算机重新启动之前,系统不会停止对库的映射操作。&#8226; 你的D L L只会映射到使用U s e r 3 2 . d l l的进程中。所有基于G U I的应用程序均使用U s e r 3 2 . d l l,不过大多数基于C U I的应用程序并不使用它。因此,如果需要将D L L插入编译器或链接程序,这种方法将不起作用。&#8226; 你的D L L将被映射到每个基于G U I的应用程序中,但是必须将你的库插入一个或几个进程中。你的D L L映射到的进程越多,“容器”进程崩溃的可能性就越大。毕竟在这些进程中运行的线程是在执行你的代码。如果你的代码进入一个无限循环,或者访问的内存不正确,就会影响代码运行时所在进程的行为特性和健壮性。因此,最好将你的库插入尽可能少的进程中。&#8226; 你的D L L将被映射到每个基于G U I的应用程序中。这与上面的问题相类似。在理想的情况下,你的D L L只应该映射到需要的进程中,同时,它应该以尽可能少的时间映射到这些进程中。假设在用户调用你的应用程序时你想要建立Wo r d P a d的主窗口的子类。在用户调用你的应用程序之前,你的D L L不必映射到Wo r d P a d的地址空间中。如果用户后来决定终止你的应用程序的运行,那么你必须撤消Wo r d P a d的主窗口。在这种情况下,你的D L L将不再需要被插入Wo r d P a d的地址空间。最好是仅在必要时保持D L L的插入状态。
      

  2.   

    直接加载 exe 不就行了,难道楼主想隐藏进程?
      

  3.   

    项目需要,没有坏动机
    现在还没有方法实现,那位知道的朋友告诉一下
    或者有运行exe不显示窗口,也不再任务栏显示的方法也行
      

  4.   

    可以
    在程序中加载动态库
    假如你是WIN32的话,this->ShowWindow(SW_HIDE)
    然后执行你想执行的功能
    这样就可以了
      

  5.   

    运行 exe 不显示窗口应该简单了,把主窗口隐藏不就行了。 CMainFrame,ShowWindow(SW_HIDE)
      

  6.   

    我做的是mfc Dialog怎么让他不显示,上边的代码写在哪呀?
      

  7.   

    谁能发给我一个例子,简单的,不显示窗口就行,谢了
    [email protected]
      

  8.   

    在OnInitDialog()
    中,输入
    this->ShowWindow(SW_HIDE)
      

  9.   

    二楼记错了?
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
    这个地方才对
      

  10.   

    没有呀,我的是xp
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
    就没有了
      

  11.   

    问题已解决
    在OnPaint事件里加
    this->ShowWindow(SW_HIDE)
    就可以了
      

  12.   

    那要是win32程序呢?如何实现呢?