Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Убийца приложения (http://forum.oszone.net/showthread.php?t=30702)

WakeUp 21-01-2003 22:07 209765

Как сделать,чтобы моё приложение нельзя было убить? Или какие messages
ловить?
(в Ctrl + Alt + Del его не видно, тут проблем нет)

Lunich 23-01-2003 00:08 209766

Можно попробовать перезапускать процесс при попытке закрыть приложение... Но это в зависимости от того, что именно хочеться увидеть в итоге...

vasketsov 23-01-2003 02:37 209767

WakeUp
Никак.
Если захотят - все равно убьют.

На некоторых NT-системах нельзя прибить CSRSS.EXE, но это так задумано на уровне ядра.

При вызове TerminateProcess ловить сообщения бесполезно, их просто не будет.

mar 23-01-2003 02:42 209768

Цитата:

Или какие messages ловить
WM_DESTROY
WM_CLOSE

vasketsov 23-01-2003 09:41 209769

mar
Эти сообщения посылаются окну, и то не гарантировано.

mar 23-01-2003 10:51 209770

vasketsov
конечно, посылаются окну (и вопрос был - какие сообщения ловить) :) насчет - необязательно - это то есть как? :o
именно что обязательно - так окошки устроены - на распределении и обработке сообщений.
см. MSDN
Когда мы хотитм закрыть окно - любым способом, то ему посылается сообщение WM_DESTROY Оно попадает в функцию окна и уже она, вызывает функцию PostQuitMessage(), которая помещает в очередь сообщений WM_QUIT
Когда из очереди выбирается WM_QUIT, GetMessage (или ее заменитель :) ) возвращает FALSE и приложение должно завершить цикл обработки.
т.е., если не хотеть закрываться, то в WndProc, или в том, что ее заменяет, надо обратить внимание на стандартное место
Код:

  case WM_DESTROY:
     PostQuitMessage(0);  // и вместо этого что-нибудь сделать
     break;


WakeUp 23-01-2003 18:13 209771

mar
Это всё при нормальном завершении приложения.
Я пробовал.:(

P.S. забыл: всё это под Win9X.

vasketsov 23-01-2003 20:26 209772

mar
В начале ссылки на WinCE, там-то как раз это не обязательно и в MSDN это даже написано.

Цитата:

обработке сообщений.
Да, но вовсе не обязательно WM_DESTROY окно получает.
Гляди псевдокод.

BOOL bClosed = FALSE; //глоб. перем.

//оконная функция
WndProc()
{
if (uMsg == WM_CLOSE)
bClosed = TRUE;
}

while (GetMessage())
{
тут цикл.

if (bClosed) break;
}

И окно WM_DESTROY не получит.

Кроме того, существуют особености неполучения этого сообщения при выходе из системы.

mar 23-01-2003 23:08 209773

vasketsov так я про wm_close писала,  а в код, извини, не воткнула. Это же Microsoft ! у них, как в египетской мифологии: куча богов отвечает за одно и то же, а для жрецов  еще и  недокументированные возможности :)
WakeUp
а что ты понимаешь под ненормальным завершением? мы же не будем настаивать на том, чтобы приложение продолжало работать с выключенным питанием :)

WakeUp 23-01-2003 23:52 209774

mar

Ну например берёшь ZXView (я обычно им пользуюсь),
он показывает все процессы (а не окна) и убиваешь любой процесс. Ведь в приложеннии может не быть окон.

mar 24-01-2003 00:51 209775

WakeUp
мы тут не вирус случайно пишем объединенными усилиями?
системный процесс? посмотри, как его убивают + MSDN на то, что там, может, скомпонуешь, как не убивать. Если придумаешь, напиши, pls. Это может быть полезно и для благих целей :)

Добавлено:

да, самое главное - склероз :( TerminateProcess и вообще посмотри Рихтера (Windows для профессионалов)  Про процессы.


[s]Исправлено: mar, 1:28 24-01-2003[/s]

J Fox 24-01-2003 10:20 209776

WakeUp
посмотри здесь http://delphi.mastak.ru/cgi-bin/foru...850962&n=5!!!!!

mar 24-01-2003 15:05 209777

о перехвате API - функций, кстати, тоже написано у Рихтера
Поскольку у меня сейчас тоже проблема с перехватом API,
я тут ковырялась в сети и нашла пример перехвата API для защиты от  удаленного перезапуска компьютера:
http://www.hackzone.ru/articles/ntadmin.html
Кроме того, перехват API обсуждался и на этом форуме

WakeUp 24-01-2003 18:26 209778

Спасибо всем за информацию.
Наверно остановлюсь на варианте с 2-3 процессами.
Он проще всех других:)


Время: 04:25.

Время: 04:25.
© OSzone.net 2001-