Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Как не дать закрыть приложение? Как не дать закрыть приложение? 
:(
    Опции темы
DIMONSOFT
  Дата 19.12.2004, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: -1
Всего: -3



Как написать два приложения которые проверяли би свое наличие в памяти и не давали себя закрыть?
--------------------
PM MAIL   Вверх
Marriage
Дата 19.12.2004, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Код

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=False;
end;


Это подойдет ????


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Albinos_x
Дата 19.12.2004, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 3
Всего: 108



Думаю, ему нужен неубиваемый процесс. тогда указанное не подойдёт.

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


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
DIMONSOFT
Дата 19.12.2004, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: -1
Всего: -3



Так вот этого я и хочу Бывалый .Напиши код!!
--------------------
PM MAIL   Вверх
Albinos_x
Дата 19.12.2004, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 3
Всего: 108



Цитата
Так вот этого я и хочу Бывалый .Напиши код!!


не понятно, к кому обращяешся...
--------------------
код получения списка процессов

Код

procedure TForm2.LoadProcessID(s:TStrings);
var H :THandle;
  Process32:TProcessEntry32;
  next : bool;
  //i:DWord;
begin
Process32.dwSize:=SizeOf(TProcessEntry32);
H:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(H,Process32) then
begin
 //i:=Process32.th32ProcessID;
  s.Add(Process32.szExeFile);
  Repeat
  Next:=Process32Next(H,Process32);
  if Next  Then
   begin
   //i:=Process32.th32ProcessID;
    s.Add(Process32.szExeFile);
    end;
 Until Not(Next);
end;
CloseHandle(H);
end;


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


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
DIMONSOFT
Дата 19.12.2004, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: -1
Всего: -3



Я извеняюсь, в этом форуме недавно, я обращался к тебе Albinos_x. Я не очень понял пример:
я добавил модуль Tlhelp32.К примеру мой exe-файл називается ds.exe.Напиши пример конкретно с ним!!
--------------------
PM MAIL   Вверх
Albinos_x
Дата 19.12.2004, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 3
Всего: 108



Код

....

function TForm1.LoadProcessID(FN:string): boolean;
var H :THandle;
  Process32:TProcessEntry32;
  next, bool : bool;
  s:string;
begin
bool:=false;
Process32.dwSize:=SizeOf(TProcessEntry32);
H:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(H,Process32) then
begin
  s:=Process32.szExeFile;
 if FN<>s then
 begin
  Repeat
  Next:=Process32Next(H,Process32);
  if Next  Then
   begin
    s:=Process32.szExeFile;
     if FN=s then
        bool:=true;
    end;
 Until Not(Next) or bool;
end;
CloseHandle(H);
Result:=bool;
end;

...

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not LoadProcessID({название ехе вместе с расширением}) then
 {запускаем ехе };
end;

...


Могут быть гденибудь ошибки(не проверял, работать должны по идее), но я думаю разберёшся


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Guest
Дата 20.12.2004, 13:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А она сама себя не обнаружит?
  Вверх
Pathfider
Дата 20.12.2004, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: нет
Всего: 1



Как вариант: состряпать хук на системные сообщения. А в добавок сделать процесс системным, чтобы без DebugPrivilege нельзя было закрыть.
Добавлено @ 21:51
Albinos_x
Код

if not LoadProcessID({название ехе вместе с расширением}) then
{запускаем ехе };
end;

А прокатит ли? По-моему лучше последить за событиями CloseQuery и Close.
--------------------
Trust is a weakness
PM MAIL   Вверх
xAnejl
Дата 21.12.2004, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.12.2004

Репутация: нет
Всего: нет



Если нужно сделать неубиваемый процесс, то либо используй ACL (http://forum.vingrad.ru/index.php?showtopic=37372&unread=1&st=0&#entry283663), либо делай перехват апи на TerminateProcess
PM MAIL   Вверх
Fantasist
Дата 22.12.2004, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Самый простой известный способ - на получение cообщения требующего прилажению закрыться, запускать новый такой же процесс, а этот убивать. Зачастую этого достадочно.




--------------------
Волны гасят ветер...
PM MAIL   Вверх
~FoX~
Дата 23.12.2004, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



Цитата(Fantasist @ 22.12.2004, 21:25)
Самый простой известный способ - на получение cообщения требующего прилажению закрыться, запускать новый такой же процесс, а этот убивать. Зачастую этого достадочно.

А это прокатит если приложение вываливается по ошибке - собственной/виндовой?


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Мебель
Дата 27.12.2004, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 14.11.2004
Где: Великие Луки

Репутация: нет
Всего: нет



А может быть просто
в OnCloseQuery засунуть CanClose:=False; и потом по таймеру
закрывать диспетчер задач? Ведь приложение можно теперь закрыть
только выкинув его из процессов диспетчера... smile
PM MAIL ICQ   Вверх
Pathfider
Дата 28.12.2004, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: нет
Всего: 1



Цитата
А может быть просто
в OnCloseQuery засунуть CanClose:=False; и потом по таймеру
закрывать диспетчер задач? Ведь приложение можно теперь закрыть
только выкинув его из процессов диспетчера...

А если написана программка для убийства именно этого процесса? Как тады...
--------------------
Trust is a weakness
PM MAIL   Вверх
DIMONSOFT
Дата 29.12.2004, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: -1
Всего: -3



Возмем к примеру Kaspersky Антивирь Lite v4.0 и какую-нибудь выключалку программ. В ней мы находим что запущено два процеса с одинаковыми названиями- aupm.exe. Только я нажимаю на кнопку выключить Каспер орет и выпихивает сообщение кто хотел завесить антивирь. ПРИ ЭТОМ КАСпер как-то блокирует выключение. Он не выключается ни НА СЕКУНДУ!!! Может он как-то перехватывает сообщение? Ничего не можете порекомендовать для моей проги?Ваших примерах прога ВЫКЛЮЧАЕТСЯ но потом быстро вкл. но хотелось бы сделать как Каспер!
--------------------
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0953 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.