Официальный сайт студ.городка НГТУ
Программирование и БД » Как отловить нестандартное завершение программы в C++Builder 

#1  08.06.06 08:07

Как отловить нестандартное завершение программы в C++Builder

Подскажите, как можно в C++ Builder отловить нестандартное завершение программы (например, нажатие ctrl+alt+del и прерывание соответствующего процесса).

Offline

#2  08.06.06 08:51

Re: Как отловить нестандартное завершение программы в C++Builder

Завершение процесса можно отловить только наличием другого процесса, который следит за твоим. На то оно и завершение, что программа его не ожидает. Можно попробовать зарегистрировать программу как системный модуль (хз как), и тогда система не позволит завершить его... Проще будет сделать программу из двух модулей, запускающихся разными процессами и дублирующими или хотябы отслеживающими друг друга... Сохранность данных - догадайся какая... так что, действовать только транзакциями и в памяти ничего несохраненного не хранить...

Offline

#3  08.06.06 13:41

Re: Как отловить нестандартное завершение программы в C++Builder

мне вот посоветовали делать это черех хуки... но вот конкретнее ничего сказать не могут :(
может кто-нибудь знает?

Offline

#4  08.06.06 16:29

Re: Как отловить нестандартное завершение программы в C++Builder

тогда тебе придется мутить с winapi

Offline

#5  08.06.06 19:47

Re: Как отловить нестандартное завершение программы в C++Builder

:) а конкретнее?

Offline

#6  08.06.06 20:48

Re: Как отловить нестандартное завершение программы в C++Builder

получилось примерно так: (моё приложение следит за работой стандартного виндовского калькулятора).  Может и не совсем правильно... но других идей мне пока не пришло. Если кому надо - пользуйтесь:

Код::

DWORD Code;
_STARTUPINFOA StartInfo = {sizeof(TStartupInfo)};
_PROCESS_INFORMATION ProcInfo;
StartInfo.cb=sizeof(StartInfo);
CreateProcess(NULL,"Calc",NULL,NULL,false,HIGH_PRIORITY_CLASS,NULL,NULL,&StartInfo,&ProcInfo);
do
        {
        GetExitCodeProcess(ProcInfo.hProcess,&Code);
        }
while(Code==STILL_ACTIVE);
if(Code!=0)
        {
        ofstream outfile ("Result.dat");
        outfile << " Аварийное завершение процесса = "<<FormatDateTime("dd.mm.yy  hh:nn",Now()).c_str()<<endl;
        outfile.close();
        }

Offline

Программирование и БД » Как отловить нестандартное завершение программы в C++Builder 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.734 сек.
Выполнено 11 запросов.