Можно послать окну сообщение WM_QUIT. Однако консольные проги вроде с этим
глючат.
Тмыл я валил через TerminateProcess. Однако при этом потом он в логе пишет
"восстановление после аварии"
//сначала необходимо создать снимок состояния системы
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
HANDLE hProcess;
//параметр TH32CS_SNAPPROCESS означает, что мы хотим узнать только информацию о процессах
bool Result = true;
bool Find = false;
//опишем структуру, в которой будет храниться эта информация
PROCESSENTRY32 *ProcEntry = new PROCESSENTRY32();
AnsiString FileName;
//Поиск запущенной программы T-Mail
Process32First(hSnapshot, ProcEntry);
FileName = ExtractFileName(StrPas(ProcEntry->szExeFile));
if(FileName == "T-MAILNT.EXE")
{
hProcess = OpenProcess(PROCESS_TERMINATE, false,
ProcEntry->th32ProcessID);
//Программа найдена
Find = true;
//Вырубаем ее
if(TerminateProcess(hProcess, 0)) //Ok
else //Косяк :-(
}
/* Вызываемые функции - булевские. Поэтому, когда вернется false, значит,
информации больше нет. => можно использовать цикл */
while(Result)
{
Result = Process32Next(hSnapshot, ProcEntry);
if(Result)
{
FileName = ExtractFileName(StrPas(ProcEntry->szExeFile));
if(FileName == "T-MAILNT.EXE")
{
hProcess = OpenProcess(PROCESS_TERMINATE, false,
ProcEntry->th32ProcessID);
//Программа найдена
Find = true;
//Вырубаем ее
if(TerminateProcess(hProcess, 0)) //Ok
else //Косяк :-(
break;
}
}
}
delete ProcEntry;
//выгрузим из памяти системный снимок
CloseHandle(hSnapshot);
if(!Find) //Программа не найдена :-(
Sergey Kaluzhskiy 2:5055/89.27
Предыдущий вопрос
|
|
Следующий вопрос
источник
by jenyok
|