Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.14;
Скачать: CL | DM;

Вниз

Помогите с ExitProcess   Найти похожие ветки 

 
AllDontFire ©   (2003-06-12 10:28) [0]

Привет Всем!
Нужен код закрывающий IEXPLORE.exe

По-моему всё работает, кроме ExitProcess:

program Projuk;
uses TlHelp32,windows,SysUtils;
Procedure Exit_IE;
var Hs,lpexit:Cardinal;lppe:tagPROCESSENTRY32;Hand:Thandle;
begin
hS:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
lppe.dwSize:=sizeof(PROCESSENTRY32);
Process32First(hS,lppe);
repeat
if Pos("IEXPLORE",UpperCase(lppe.szExeFile))>0
Then begin
Hand:=OpenProcess(PROCESS_QUERY_INFORMATION,false,lppe.th32ProcessID);
If hand=NULL Then MessageBox(0,"Hand","NULL",0);
if not GetExitCodeProcess(hand,lpExit) Then MessageBox(0,"GetExitCode","Failed",0);;
ExitProcess(lpExit);
CloseHandle(Hand);
end
until not Process32next(hS,lppe);
CloseHandle(hS)
end;
begin
Exit_IE
end.


Подскажите - что не так?
Заранее спасибо.


 
StAL ©   (2003-06-12 11:18) [1]

Функция ExitProcess закрывает процесс, который ее вызвал. Она реализована через ф-цию TerminateProcess примерно так.

TerminateProcess(GetCurrentProcess, uExitCode);

Именно с пом. TerminateProcess можно закрыть чужой процесс, но так делать не рекомендуется. TerminateProcess не очищает никаких ресурсов процесса! Если например процесс работал с разделяемым ресурсом с пом. мьютексом, то возможен такой ход событий.

процесс запретил доступ другим процессам к разделяемому ресурсу
записывает в него какие - то данные
и тут Вы его завершаете с пом. TerminateProcess

Он не успел разрешить запись в ресурс другим процессам, это может привести к зависанию системы.
Никогда не используйте эту функцию кроме тех случаев, когда это действительно необходимо!

Лучше с пом. WinSight определи класс окна IE и вызови
hWnd := FindWindow(<класс IE>, nil);
PostMessage(hWnd, WM_QUIT, 0, 0);

Вот так!

С ув. Алексей


 
AllDontFire ©   (2003-06-12 11:30) [2]

Не работает и так:


program Project1;
uses windows,messages;
var wnd:Hwnd;
begin
wnd:=FindWindow("IEFrame",nil);
PostMessage(wnd,Wm_quit,0,0);
end.


 
KpeHgeJIb   (2003-06-12 11:38) [3]

Вместо wm_quit поставь wm_Close и все заработает


 
AllDontFire ©   (2003-06-12 11:49) [4]

Спасибо! заработало:
закрывает все окна ИЕ


program Project1;
uses windows,messages;
var wnd:Hwnd;
begin
wnd:=FindWindow("IEFrame",nil);
while wnd<>0 do begin
PostMessage(wnd,Wm_close,0,0);
( "IEFrame",nil)
Спасибо! заработало:
закрывает все окна ИЕ


program Project1;
uses windows,messages;
var wnd:Hwnd;
begin
wnd:=FindWindow("IEFrame",nil);
while wnd<>0 do begin
PostMessage(wnd,Wm_close,0,0);
wnd:=FindWindow("IEFrame",nil)
end
end.



Страницы: 1 вся ветка

Текущий архив: 2003.08.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
14-45155
3asys
2003-07-30 17:04
2003.08.14
Работа с электронной подписью в Delphi


14-45053
IntLex
2003-07-27 10:26
2003.08.14
Нужна информация о dll


14-45163
Soft
2003-07-30 15:35
2003.08.14
Зачем платить больше


14-45064
nika_ufc
2003-07-27 19:27
2003.08.14
как вы думаете господа ?


14-45060
Marser
2003-07-27 19:47
2003.08.14
Именинники 27 июля