Форум: "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.037 c