Форум: "Система";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Вниз
Shell.... Найти похожие ветки
← →
inc(665) (2002-06-06 22:51) [0]Вот у меня какой вопрос....... Ведь есть такой параметр в system.ini, как shell=something.exe, так вот... изначально shell=explorer.exe. Если поменять значение, например на shell=wincmd.exe при запущенном explorer.exe, то нужно либо перезагрузить компьютер либо do_something.
Так вот что надо сделать чтоб без перезагрузки компьютера поменялся shell??
← →
ghost_by (2002-06-07 00:43) [1]Может шибануть текущий шел?
← →
Almaz (2002-06-07 01:15) [2]Вообще говоря, не совсем понятно зачем это надо. Ведь полноценным Shell"ом может являтся очень небольшое число программ (Explorer, Talisman). Wincmd полностью shell не заменит. Но если уж так надо, то необходимо завершить процесс эксплорера и запустить процесс нового shell"a. (См. TerminateProcess и CreateProcess).
Удачи.
← →
inc(665) (2002-06-07 08:44) [3]2 Almaz: не разу не работал с командами TerminateProcess & TerminateProcess, мож пояснишь?
← →
Timon (2002-06-07 13:46) [4]
Смотри справку по Винде. А вообще вот процедура которая вышибает Explorer.
Uses TLHelp32;
Procedure KillExplorer;
Procedure Kill(id:cardinal);
var proc:thandle;
begin
proc:=OPenProcess(PROCESS_ALL_ACCESS,false,ID);
TerminateProcess(proc,DWORD(-1));
CloseHandle(proc);
end;
function UpCaseString(s:shortstring):shortstring;
Var i:integer;
begin
Result:="";
for i:=1 to length(s) do result:=result+UpCase(s[i]);
end;
Var Snap:Cardinal;
Process:TProcessEntry32;
begin
snap:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
if snap<>0 then
begin
Process.dwSize:=sizeof(Process);
if Process32first(snap,process) then
begin
if UpCaseString(ExtractFileNmae(process.th32ProcessID))="EXPLORER.EXE" then
begin
kill(process.th32ProcessID);
end;
while Process32next(snap,process) do
if UpCaseString(ExtractFileNmae(process.th32ProcessID))="EXPLORER.EXE" then
begin
kill(process.th32ProcessID);
end
end;
end;
CloseHandle(Snap);
end;
Вот. Но это для Win9x.
← →
inc(665) (2002-06-07 14:09) [5]А как мне поставить вместо explorer.exe другой shell без перезагрузки?? Createprocess?
← →
Almaz (2002-06-07 23:54) [6]
> inc(665) (07.06.02 14:09)
> А как мне поставить вместо explorer.exe другой shell без
> перезагрузки?? Createprocess?
function Execute(FileName: String): Boolean;
var
SI: TStartupInfo;
PI: TProcessInformation;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
Result := CreateProcess(nil, PChar(FileName), nil, nil, FALSE,
CREATE_DEFAULT_ERROR_MODE, nil, nil, SI, PI);
if Result then
begin
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end;
end;
...
Execute("wincmd.exe");
...
Удачи.
← →
inc(665) (2002-06-08 22:04) [7]2Timon: Что то твоя процедура "вышыбания" Explorer.exe не пашет!
2ALL: Кто нибуть знает, как можно детерминейтить explorer.exe (или любой другой процесс)?
← →
SPE (2002-06-08 23:11) [8]Ну никак не получается т.к. сисини обрабатывается ПЕРЕД ЗАГРУЗКОЙ GUI
← →
inc(665) (2002-06-09 00:13) [9]2Spe: Серьезно что ли?? а я и не знал... ты прямо открыл мне глаза :)
Все же.. как процесс детерминейтить (напр. explorer.exe)
← →
Almaz (2002-06-09 00:35) [10]
> Timon © (07.06.02 13:46)
Ну вы и наворотили :)) Убить процесс explorer"a можно и проще:
procedure KillIt;
var
ProcessID: Integer;
begin
GetWindowThreadProcessID(FindWindow("Progman", nil), @ProcessID);
TerminateProcess(OpenProcess(PROCESS_TERMINATE, FALSE, ProcessID), 0);
end;
Другое дело, что после завершения его процесса Windows самостоятельно запустит новый экземпляр explorer"a (проверял на Win2k).
Удачи.
← →
Timon (2002-06-10 14:00) [11]
> Almaz.
Я просто не знал имя главного окна explorer и применил общий метод.
> inc(665) (09.06.02 00:13)
Там просто есть очепятки Вместо ExtractFileNmae должно быть ExtractFileName. А так вроде все пашет.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c