Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

Как завершить Explorer.exe?   Найти похожие ветки 

 
Seldon ©   (2004-05-30 15:15) [0]

Через TerminateProcess - он закрывается и тут же открывается снова.


 
Piter ©   (2004-05-30 17:50) [1]

Seldon (30.05.04 15:15)
Как завершить Explorer.exe


а зачем?


 
Seldon ©   (2004-05-30 18:58) [2]

Чтоб освободить память, им занимаемую. Зачем? Для запуска игрушки.


 
VMcL ©   (2004-05-30 19:03) [3]

>>Seldon ©  (30.05.04 15:15)

>Через TerminateProcess - он закрывается и тут же открывается снова.

Ибо нефиг.


 
Seldon ©   (2004-05-30 19:10) [4]

А если очень надо?

Кто в компе хозяин: я или Windows? (c)


 
Piter ©   (2004-05-30 20:19) [5]

windows


 
Piter ©   (2004-05-30 20:20) [6]

если она запущена...


 
VMcL ©   (2004-05-30 20:31) [7]

>>Seldon ©  (30.05.04 19:10) [4]

>Кто в компе хозяин: я или Windows? (c)

Кнопки Power и Reset :)


 
Seldon ©   (2004-05-30 20:35) [8]

Ребята и мужики, давайте по существу :)


 
Плохиш   (2004-05-30 21:10) [9]


> Seldon ©   (30.05.04 18:58) [2]
> Чтоб освободить память, им занимаемую. Зачем? Для запуска
> игрушки.

Давно так не смеялся :-))))


 
Piter ©   (2004-05-30 21:11) [10]

А все уже сказано - Explorer является неотъемлемой частью windows. Как кока-кола и бигмак


 
Seldon ©   (2004-05-30 21:16) [11]

>Плохиш   (30.05.04 21:10) [9]
Я рад за тебя.

>Piter ©   (30.05.04 21:11) [10]
TaskManager его легко снимает.

>Как кока-кола и бигмак
Не, кока-колу можно снести. Я вместо неё квас ставлю. :)


 
Piter ©   (2004-05-30 21:40) [12]

Seldon (30.05.04 21:16) [11]
TaskManager его легко снимает


кого? TaskManager использует тот же самый TerminateProcess


 
Piter ©   (2004-05-30 21:41) [13]

Приведи код программы по использованию TerminateProcess


 
DVM ©   (2004-05-30 22:00) [14]

function KillProcessByFileName(ExeFileName: string): Integer;
const
 PROCESS_TERMINATE = $0001;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin
 Result := 0;
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

 while Integer(ContinueLoop) <> 0 do
 begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
     UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
     UpperCase(ExeFileName))) then
     Result := Integer(TerminateProcess(
                       OpenProcess(PROCESS_TERMINATE,
                                   BOOL(0),
                                   FProcessEntry32.th32ProcessID),
                                   0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
 end;
 CloseHandle(FSnapshotHandle);
end;


 
DVM ©   (2004-05-30 22:01) [15]

function KillProcessByFileName(ExeFileName: string): Integer;
const
 PROCESS_TERMINATE = $0001;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin
 Result := 0;
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

 while Integer(ContinueLoop) <> 0 do
 begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
     UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
     UpperCase(ExeFileName))) then
     Result := Integer(TerminateProcess(
                       OpenProcess(PROCESS_TERMINATE,
                                   BOOL(0),
                                   FProcessEntry32.th32ProcessID),
                                   1));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
 end;
 CloseHandle(FSnapshotHandle);
end;


 
Piter ©   (2004-05-30 22:13) [16]

DVM (30.05.04 22:01) [15]

ты где такой код взял, умник? :)


 
Piter ©   (2004-05-30 22:14) [17]

Или Seldon = DVNM?


 
Piter ©   (2004-05-30 22:14) [18]

Seldon = DVM?


 
Piter ©   (2004-05-30 22:19) [19]

Вогт это хорошо:

while Integer(ContinueLoop) <>

и это тоже:

Result := Integer(TerminatePro...

И вообще, где получение привелегий на случай запуска под NT?


 
DVM ©   (2004-05-30 22:22) [20]


> Piter ©   (30.05.04 22:13) [16]
> DVM (30.05.04 22:01) [15]
>
> ты где такой код взял, умник? :)

1) Seldon <> DVM?
2) Без оскорблений пожалуйста.
3) Код имеет некоторые огрехи.
4) Он все-таки работает.
5) Код не мой, наковырял у себя среди прочего хлама.


 
Seldon ©   (2004-05-30 23:21) [21]

Нет, Seldon<>DVM.

Вот мой код.


var
 SShot:Cardinal;
 Entry:TProcessEntry32;
 FN:String;
begin
 SShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Entry.dwSize:=SizeOf(TProcessEntry32);

 Process32First(SShot,Entry);
 repeat
   if Entry.th32ProcessID<>0 then
   begin
     FN:=Entry.szExeFile;
     if CompareText(FN,"explorer.exe")=0 then
     begin
       TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,Entry.th32ProcessID,0); // а надо 1
       Break
     end;
   end
 until not Process32Next(SShot,Entry);

 CloseHandle(SShot);
end;


Всё дело в той самой единичке. Всем спасибо.

PS. Кстати, а на что влияеят этот самый uExitCode?
PPS. Piter, а как получить эти самые привилегии?


 
Игорь Шевченко ©   (2004-05-30 23:47) [22]

Piter ©   (30.05.04 22:19) [19]


> И вообще, где получение привелегий на случай запуска под
> NT?


А что, нужны ?


 
DVM ©   (2004-05-30 23:59) [23]

В дополнение к коду выше. А не нужно ли делать CloseHandle на то, что возвращает OpenProcess?

> PS. Кстати, а на что влияеят этот самый uExitCode?

Тоже интересовался на этот счет, в MSDN очень кратко написано:
uExitCode
[in] Exit code to be used by the process and threads terminated as a result of this call. Use the GetExitCodeProcess function to retrieve a process"s exit value. Use the GetExitCodeThread function to retrieve a thread"s exit value.


 
Gero ©   (2004-05-30 23:59) [24]


> А все уже сказано - Explorer является неотъемлемой частью
> windows

Ха-ха-ха.


 
Piter ©   (2004-05-31 00:07) [25]

Seldon (30.05.04 23:21) [21]
Всё дело в той самой единичке. Всем спасибо


1) TerminateProcess сама по себе функция, которую надо вызывать в крайнем случае...
2) еще раз повторю, что explorer неотделим от windows. Не надо его завершать.

uExitCode определяет код завершения процесса. Если ноль - то, по моему, это значит нормальное завершение (хотя какое нафиг нормальное, если был вызван TerminateProcess). Если не ноль - то аварийное. Вот видимо windows восстанавливает explorer, если он нормально завершился (код выхода ноль), и не восстанавливает, если завершился аварийно (единица или там еще чего).

Seldon (30.05.04 23:21) [21]
Piter, а как получить эти самые привилегии?


с помощью функции AdjustTokenPrivileges. Допустим, нужно получать Debug привелегии, чтобы иметь возможность терминировать сервисы. Например, чтобы убить Outpost Firewall, работающий в режиме сервиса :)


 
Piter ©   (2004-05-31 00:08) [26]

Игорь Шевченко (30.05.04 23:47) [22]
А что, нужны ?


смотря дл чего. Для некоторых вещей - нужны... см. предыдущий пост


 
Piter ©   (2004-05-31 00:10) [27]

Gero (30.05.04 23:59) [24]
Ха-ха-ха


есть возражения?


 
Gero ©   (2004-05-31 00:13) [28]


> Piter ©   (31.05.04 00:10)

Ну допусим я без explorer"а работаю и совсем забыл про него.
Какая же это неотъемлимая часть?


 
DVM ©   (2004-05-31 00:15) [29]


> Piter ©   (31.05.04 00:07) [25]


> uExitCode определяет код завершения процесса. Если ноль
> - то, по моему, это значит нормальное завершение (хотя какое
> нафиг нормальное, если был вызван TerminateProcess). Если
> не ноль - то аварийное.

Конкретно про 1 нигде не написано. По крайней мере я не нашел. Просто как-то попробовал - эксплорер умер. До этого перезапускался.

> еще раз повторю, что explorer неотделим от windows. Не
> надо его завершать.

Почему не надо то? Отделим еще как.


 
Piter ©   (2004-05-31 00:15) [30]

Gero (31.05.04 00:13) [28]

не путай процесс Explorer.exe у тебя в памяти, и окна Explorer"а, которые ты никогда не открываешь...


 
Piter ©   (2004-05-31 00:16) [31]

DVM (31.05.04 00:15) [29]
Конкретно про 1 нигде не написано


угу. И про 2 тоже не написано. И даже про 3, 4, 5 и т.д.


 
Piter ©   (2004-05-31 00:17) [32]

DVM (31.05.04 00:15) [29]
Почему не надо то? Отделим еще как.


ой, да делайте что хотите в своих программах, только мне их не присылайте :)


 
Gero ©   (2004-05-31 00:17) [33]


> Piter ©   (31.05.04 00:15)

У меня нет в памяти процесса explorer.exe.
Да и откуда ему взяться, он же не запускается сам по себе.


 
DVM ©   (2004-05-31 00:19) [34]


> не путай процесс Explorer.exe у тебя в памяти, и окна Explorer"а,
> которые ты никогда не открываешь...

например?


 
Piter ©   (2004-05-31 00:26) [35]

Gero (31.05.04 00:17) [33]
У меня нет в памяти процесса explorer.exe.


да ладно? Как это? Без Explorer.exe у тебя не будет ни пуска, ни рабочего стола...

DVM (31.05.04 00:19) [34]
например?


что например?


 
Gero ©   (2004-05-31 00:27) [36]


> да ладно? Как это? Без Explorer.exe у тебя не будет ни пуска,
> ни рабочего стола...

LOL.
Ну допустим нет и что?
Мне и без них прекрасно живется.


 
Seldon ©   (2004-05-31 00:28) [37]

>да ладно? Как это? Без Explorer.exe у тебя не будет ни пуска, ни рабочего стола...
Точно. А альтернативные шеллы?


 
Piter ©   (2004-05-31 00:30) [38]

Gero (31.05.04 00:27) [36]
Ну допустим нет и что?


у тебя их действительно нету? или ты просто поспорить решил по поводу хорошено настроения?

IconTray у тебя тоже нету?


 
DVM ©   (2004-05-31 00:31) [39]


> да ладно? Как это? Без Explorer.exe у тебя не будет ни пуска,
> ни рабочего стола...

Вы смеетесь что ли? Пуск, панель задач, рабочий стол со значками - это что неотъемлемые атрибуты системы? Есть куча других оболочек - можно поставить любую. У меня стоит своя собственная - там есть и пуск и панель задач и десктоп и даже трей. И называется она не Explorer.

> что например?

Да мне показалось... Фраза звучала так, что есть некие другие окна эксплорера, о существовании которых никто не догадывается.


 
Seldon ©   (2004-05-31 00:31) [40]

Их вполне может не быть. Aston, talisman. например.


 
Gero ©   (2004-05-31 00:32) [41]


> Piter ©   (31.05.04 00:30)

НЕТУ у меня их, НЕТУ.
Взял, убил explorer.exe и обхожусь без них.


 
Piter ©   (2004-05-31 00:50) [42]

DVM (31.05.04 00:31) [39]
У меня стоит своя собственная - там есть и пуск и панель задач и десктоп и даже трей


хм. Ну в общем, убедили. Я действительно слышал об альтернативных Shell"ах.
Только вот Explorer то как раз автоматом и грузится. Во всяких автозагруках и RunOnce его нету, а каждый раз при входе в винду появляется пуск и все остальное :)
Небось в реестре какой ключик?

Причем, интересно. А ваш трей показывает иконки те же самые, что и виндовый трей? То есть любая иконка, которую "положили" с помощью Shell_NotifyIcon будет у вас показана? Интересно, а где вы берете список иконок, окна, куда нужно сообщения от иконок посылать?

P.S. Просто для меня дико, что винда и без explorer"а


 
DVM ©   (2004-05-31 00:56) [43]


> Небось в реестре какой ключик?

да для NT/2000/XP - Ключ в HKCU или HKLM, В 98 - в system.ini.

> А ваш трей показывает иконки те же самые, что и виндовый
> трей? То есть любая иконка, которую "положили" с помощью
> Shell_NotifyIcon будет у вас показана?

Да все абсолютно. Даже ShellServiceObjects (сеть, громкость ...)

> Интересно, а где вы берете список иконок, окна, куда нужно
> сообщения от иконок посылать?

Окну с классом Shell_TrayWnd приходят сообщения WM_COPYDATA - в них вся информация. Если запускать совместно с эксплорером, то нужно ставить ловушку WH_GETMESSAGE на сообщения этого окна эксплорера иначе дать классу своего окна такое название.


 
Gero ©   (2004-05-31 00:57) [44]


> Piter ©   (31.05.04 00:50)

http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/treasury/systray.htm


 
DVM ©   (2004-05-31 01:02) [45]


> Gero ©   (31.05.04 00:57) [44]

то, что там написано, годится лишь для самого-самого поверхностного ознакомления с тем, что из себя представляет область уведомлений и как ее воспроизвести в своей программе.


 
Gero ©   (2004-05-31 01:03) [46]


> DVM ©   (31.05.04 01:02)

Да, и пример там глючный.
Но Piter"у, кажется больше пока и не надо.

P.S. Off:
Ты свою статью писать так и не собираешься?


 
Piter ©   (2004-05-31 01:08) [47]

DVM (31.05.04 00:56) [43]
то нужно ставить ловушку WH_GETMESSAGE на сообщения этого окна эксплорера иначе дать классу своего окна такое название


ни фига. Всего-то... да, не так уж и сложно :)


 
DVM ©   (2004-05-31 01:10) [48]


> Ты свою статью писать так и не собираешься?

Это про оболочки что-ли? Да надо бы. Но времени свободного немного. Начал вообще то.


 
DVM ©   (2004-05-31 01:14) [49]


> да, не так уж и сложно :)

Сложности начинаются потом, с вытаскиванием нужной информации из WM_COPYDATA. Есть несколько видов структур, описывающих данные для иконки (для 98/2000/xp) и также абсолютное отсутствие инфы о том, как подгрузить, скажем, регулятор громкости и т.д. И куча другого, на разгребание чего уйдет пол-года минимум.



Страницы: 1 2 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.032 c
14-1087569243
cf
2004-06-18 18:34
2004.07.11
;)


14-1087733307
Александр Матросов
2004-06-20 16:08
2004.07.11
Что случилось с MAIL.RU?


4-1086168939
panov
2004-06-02 13:35
2004.07.11
HDC, использование в OnPaint


14-1087717818
Anatoly Podgoretsky
2004-06-20 11:50
2004.07.11
С днем рождения 19.06.2004


8-1082202382
CodVip
2004-04-17 15:46
2004.07.11
Эквалайзер





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский