Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.47 MB
Время: 0.012 c
3-71016
Alexandrda
2002-07-31 16:09
2002.08.22
Как открыть таблицу, если индекс удален


3-70968
Ag2002
2002-07-29 16:16
2002.08.22
FoxPro


1-71225
alexsandri
2002-08-11 12:33
2002.08.22
необходимо прогроаммно удалить запись вреестре


1-71094
Uran
2002-08-12 15:31
2002.08.22
Изменение регистра строки.


4-71414
Nickolay
2002-06-06 18:28
2002.08.22
Номер иконки в Dll или Exe файле больше их количества





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский