正常情况下:在system.ini里shell=Explorer.exe时,加载的是“系统shell”(我
不知道这样叫对不对),但是进了系统后再运行Explorer.exe则是资源管理器。
//以下根据CoolSlob的建议
我的情况,我用exe2to1把Explorer.exe和我的程序myfile绑定后,生成NewExpl.exe,
并且改system.ini里shell=NewExpl.exe,可系统加载时,并不是把NewExpl.exe加载
为Shell,而只是弹出“资源管理器”并且“然后”运行我的程序;这样的话,退出
我程序后根本就不能使用Win98了呀。//请耐心看下面相关背景说明
//参考《Windows自启动方式大全》
//我想实现的功能就是:登陆进Win98,显示桌面以前就加载我的程序。
方案一.写在RunOnce:
可以实现,但如果用户在我程序(myfile)show出来时马上Reset电源,则myfile下次
不能随系统自启动
//【参看】怎么判断Win98的RunOnce运行结束了呢?
http://www.csdn.net/Expert/TopicView2.asp?id=1040371&datebasetype=now
方案二.用VXD调用外部程序
//【参看】寻可以调用外部程序的Vxd代码
http://www.csdn.net/Expert/TopicView2.asp?id=1052002&datebasetype=now
因为没人给我,所以没解决~
方案三.把myfile和Explorer.exe进行绑定,问题如上,期待解决。//相关未结贴
http://www.csdn.net/Expert/TopicView2.asp?id=1057822&datebasetype=now
http://www.csdn.net/Expert/TopicView2.asp?id=1055769&datebasetype=now

解决方案 »

  1.   

    自己先来顶一顶,不知大家看眼花没?
    总结一下,下面是我想要到达的目的:
    1.启动前能屏蔽Alt+Ctrl+Del,我用美萍的一个vxd做到了
    2.myfile能在登陆进Win98、显示桌面前就“完全show出来”
    3.如果用户在myfile刚好show出来时,马上Reset,下次系统启动时myfile仍
    能自启动//这就说明写在RunOnce里不行//其实,我觉得用Vxd调用外部程序最好,但是好困难:( (期待源码中)
    //用Explorer.exe绑定myfile,也得了解Explorer.exe的运行机制,也好困难~
      

  2.   

    你写你的程序~然后调用Explorer呢~
      

  3.   

    你说shell=myfile.exe
    然后在myfile里ShellExecute这个Explorer.exe?
    不会吧,我试试先……
      

  4.   

    我看C++ Builder深度历险里说~
    Explorer.exe首次执行时会调用shell,以后只会调用资源管理器~
    so……
      

  5.   

    to rivershan(笨猫):不行了,和我把Explorer绑定myfile一样的,
    也是弹出的资源管理器:(
      

  6.   

    是不是还有程序要调用Explorer?
      

  7.   

    我觉得RUNONCE和RUN不一样吧。
    runonce在正常启动之后就会删除的。而run才是你想要得吧
      

  8.   

    to coyer:写在run里的话,myfile加载太靠后了,还得比金山毒霸、FreeRAM等后加载~~~
      

  9.   

    换个做法,修改explorer.exe,让explorer.exe启动的时候加载你的dll,让dll作你想作的事情,这还不用访问注册表,runonce之类的问题不复存在,岂不是更高明。
      

  10.   

    不如把explorer.exe改名成abc.exe,把自已程序改名为explorer.exe,不是更简单?
    自己不处理的请求就转给abc.exe.
      

  11.   

    刚才把C:\windows\system\Mprexe.exe和myfile绑定了测试,开机可以加载
    Explorer.exe为系统shell,myfile也可以先去桌面显示前加载完成
    //请备份Mprexe.exe
    ——但是,如果用“注销”的话,则不能加载myfile,这是不是说注销的时候
    Mprexe.exe是没有运行的?to oldworm:你有Explorer调用Dll的列子吗?发一份看看? [email protected] ,谢谢^_*
      

  12.   

    大家查查进程,不知道用
    Rundll32.exe mydll.dll,接口函数
    这个方法,是否在桌面显示前加载?因为它只比Explorer早一步的
      

  13.   

    我以前写了一个工具,修改pe文件头部,在import table中插入dll,这是静态插入dll的方法,有时这样比较简单,如我还写了一个记录QQ聊天记录和去除QQ广告的东西,都是用这种方法加载的。
    工具用法是这样:
    setdll -d:a.dll,b.dll c.exe 
    将a.dll和b.dll插入到c.exe的import table中,c.exe启动的时候将首先加载a.dll和b.dll,用这种方法辅助钩api,可以作很多有意义的事情。
      

  14.   

    我原先写过一个工具setdll,专门用来修改一个pe格式的文件,给pe格式文件插入dll,如
    setdll -d:a.dll,b.dll explorer.exe
    就会给explorer.exe插入a.dll和b.dll,启动explorer.exe的时候就会加载我的a.dll和b.dll
      

  15.   

    关于注册表启动项run    ->    在进入98后才调用执行的(NT下有效)runonce  ->  只在进入98后运行一次,下次该项被删除RunServices ->  在进入98系统以前就调用的程式,程式启动后才进入98RunServicesOnce -> 在进入98系统前运行一次,下次该项被删除以上项目是指HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices如果要在进入98前调用程式,则写在上面的项目中就可以了
    可以试验:要求进入98要输入密码,在上面的项目中RunServices加入你的启动项结果:调用的你的程式运行了,但98还在待用户输入密码试验2:要求进入98要输入密码,在上面的项目中Run加入你的启动项
    结果:输入密码进入98后,调用的你的程式运行了在system.ini 中好象可以这样写也可以达到要求shell=yourprg;Explorer没有做过试验,只是记得在书上看到过
    其实有兴趣您完全可以自已写一个 explorer
    它的做用和dos 下的 command 一样,不过是个图形方式的用户接口
    如果你能做一个新的图形方式的用户接口就可以这样shell = youinterface做过试验,其它的程式一样可以调用
      

  16.   

    to Saimen:不知道你做过实验没有?
    关于写在RunServices里,因为我用的windows友好登陆,所以没出现登陆框;
    我的程序(exe的)是在桌面显示后才加载的,甚至比金山毒霸、FreeRAM等后加载。
    //RunServices有个用法是
    //Rundll32.exe powrprof.dll,LoadCurrentPwrScheme,
    //那是否只能做成Dll才能象你所说,程序启动后才进入win98
    system.ini里是shell=Explorer yourprg;你刚好写反了谢谢各位的关注,请继续…… ;-P
    //附DFW上一个回复
    来自:payer, 时间:2002-9-29 9:07:00, ID:1352631 
    to cornermoss:
    ie 插件
    http://gamebbs.d2g.biz/download/iehelper.rar使用方法:
    regsvr32 iehelper.dll作用:
    防止在IE里点击有关 "C:" 的链接
      

  17.   

    我做过实验的
    我的程式就是放在RunServices,这里的运行的程式要看你自己怕程式运行的速度了,它是和加载98是同时的,如果你的程式速度太慢,则就会如你所说,显示出98才会出现你的程式反正我的程式就放在哪里的,没有问题 100% 在98前运行
      

  18.   

    to Saimen:我的程序myfile最多两秒时间就可以完全show出来的,
    以前写在RunOnce里,通过myfile调用的另一个程序myapp甚至还能
    在RunOnce没结束的时候写回键值到RunOnce里~~(这样还造成了循环)
      

  19.   

    shell=explore.exe后面应该可以接参数吧!
      

  20.   

    你就按我说的,改为98要输入密码才能进的再把你的程式放在  RunServices 中一定是你的程式运行了,98还在等着输入密码进去
      

  21.   

    to Saimen:或许RunServices可以吧~但是老板说不能显示登陆框,怎么办?
    我还把什么蓝天白云、任务栏等等都给去掉了,就是不能出现Win98的东西~~这里有人知道怎么在Explorer里加入Dll吗?
      

  22.   

    我说的是让你试一下如果要98的所有东西都不出现直接就写在 shell=yourprog   开机就是你的程式,98不会运行了如果在你的程式里加入可以调用其它程式的功能就可以完成一些其它的程式调用了如果要起动98再把它改回去再重启动
      

  23.   

    to Saimen:你倒说得很简单似的,如果这个问题这么好解决,也就不会花我
    667(Csdn)+200(DFW)这么多分了^_*
      

  24.   

    我还没死~~继续晒晒^_*//借花献佛一下下,别人的东东;-P
    已经包含源程序
    http://gamebbs.d2g.biz/download/IEHelper.rar
    使用方法:
    regsvr32.exe iehelper.dll
    作用:
    不能在IE里打开有关 "C:" 的东西
    ***********************************
    //下面是不用regsvr32.exe iehelper.dll,直接写注册表
      //以下注册IEHelper.dll
      RegKey.RootKey:=HKEY_LOCAL_MACHINE;
      RegKey.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{49E0E0F0-5C30-11D4-945D-000000000000}',True);
      RegKey.CloseKey;
      RegKey.OpenKey('\Software\CLASSES\CLSID\{49E0E0F0-5C30-11D4-945D-000000000000}',True);
      RegKey.WriteString('','IE 4.x-5.x BHO in ObjectPascal');
      RegKey.CloseKey;
      RegKey.OpenKey('\Software\CLASSES\CLSID\{49E0E0F0-5C30-11D4-945D-000000000000}\InprocServer32',True);
      RegKey.WriteString('',ExtractFilePath(paramstr(0))+'IEHelper.dll');
      RegKEy.WriteString('ThreadingModel','Apartment');
      RegKey.CloseKey;
      RegKey.OpenKey('\Software\CLASSES\CLSID\{49E0E0F0-5C30-11D4-945D-000000000000}\ProgID',True);
      RegKey.WriteString('','IEHELPER.IEHelperOP');
      RegKey.CloseKey;
      RegKey.OpenKey('\Software\CLASSES\IEHELPER.IEHelperOP',True);
      RegKey.WriteString('','IE 4.x-5.x BHO in ObjectPascal');
      RegKey.CloseKey;
      RegKey.OpenKey('\Software\CLASSES\IEHELPER.IEHelperOP\Clsid',True);
      RegKey.WriteString('','{49E0E0F0-5C30-11D4-945D-000000000000}');
      RegKey.CloseKey;
      RegKey.RootKey:=HKEY_CLASSES_ROOT;
      RegKey.OpenKey('\CLSID\{49E0E0F0-5C30-11D4-945D-000000000000}',True);
      RegKey.WriteString('','IE 4.x-5.x BHO in ObjectPascal');
      RegKey.CloseKey;
      RegKey.OpenKey('\CLSID\{49E0E0F0-5C30-11D4-945D-000000000000}\InprocServer32',True);
      RegKey.WriteString('',ExtractFilePath(paramstr(0))+'IEHelper.dll');
      RegKEy.WriteString('ThreadingModel','Apartment');
      RegKey.CloseKey;
      RegKey.OpenKey('\CLSID\{49E0E0F0-5C30-11D4-945D-000000000000}\ProgID',True);
      RegKey.WriteString('','IEHELPER.IEHelperOP');
      RegKey.CloseKey;
      RegKey.OpenKey('\IEHELPER.IEHelperOP',True);
      RegKey.WriteString('','IE 4.x-5.x BHO in ObjectPascal');
      RegKey.CloseKey;
      RegKey.OpenKey('\IEHELPER.IEHelperOP\Clsid',True);
      RegKey.WriteString('','{49E0E0F0-5C30-11D4-945D-000000000000}');
      RegKey.CloseKey;
      //注册IEHelper.dll完成问题连接http://www.delphibbs.com/delphibbs/dispq.asp?lid=800383
      

  25.   

    //以下删除IEHelper.dll的注册信息
      RegKey.RootKey:=HKEY_LOCAL_MACHINE;
      if RegKey.KeyExists('\Software\CLASSES\IEHELPER.IEHelperOP') then
        begin
          RegKey.DeleteKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\{49E0E0F0-5C30-11D4-945D-000000000000}');
          RegKey.DeleteKey('\Software\CLASSES\CLSID\{49E0E0F0-5C30-11D4-945D-000000000000}');
          RegKey.DeleteKey('\Software\CLASSES\IEHELPER.IEHelperOP');
          RegKey.RootKey:=HKEY_CLASSES_ROOT;
          RegKey.DeleteKey('\CLSID\{49E0E0F0-5C30-11D4-945D-000000000000}');
          RegKey.DeleteKey('\IEHELPER.IEHelperOP');
        end;
      //删除IEHelper.dll注册信息完成
      RegKey.Free;继续顶顶,没人帮偶呀:~~~~~~~