![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват закрытия приложения [D6, WinXP]
webpauk © (2006-12-25 13:09:00)Подскажите как перехватить закрытие приложения и изъять его handle.
Пример очень желателен
trubin (2006-12-25 15:17:00) [1]А как ты отлавливаешь открытие? Если запускаешь сам, или периодически перебираешь процессы, то у тебя есть ИД процесса, если перебираешь окна, то по хендлу окна с помощью GetWindowThreadProcessId опять можно получить ИД процесса, по ИД получаешь хэндл процесса, и ставишь на ожидание в отдельном потоке WaitForSingleObject или WaitForMultipleObjects.
Если интересующих окон несколько в одном процессе, то тогда SetWindowsHookEx + WH_SHELL + HSHELL_WINDOWDESTROYED, ну ДЛЛ-ку конечно писать придется.
В инете по хукам масса информации в т.ч. и с примерами.
Сергей М. (2006-12-25 14:41:00) [2]
> webpauk (25.12.06 14:36) [15]
Там и найдешь и "конкретно" и не очень.
webpauk (2006-12-25 14:36:00) [3]
> Сергей М. © (25.12.06 14:35) [14]
гугль с яндехом хороши, а мне надо конкретно на закрытие. вот и прошу пример
Сергей М. (2006-12-25 14:35:00) [4]На этом сайте в статьях вроде бы имеются примеры инсталляции глоб.хуков.
Да и гугль со справкой еще не усохли - см. SetWindowsHookEx
webpauk (2006-12-25 14:32:00) [5]
> trubin © (25.12.06 14:25) [11]
окна чужой программы.
> Сергей М. © (25.12.06 14:25) [10]
если не тяжело пример
Сергей М. (2006-12-25 14:32:00) [6]
> trubin © (25.12.06 14:25) [11]
Окна экземпляров виндового калькулятора он пасёт)
trubin (2006-12-25 14:25:00) [7]Окон твоей программы ?
Сергей М. (2006-12-25 14:25:00) [8]Таким же образом, каким и "открытие окон" - установкой хука на эти конкретные события.
webpauk (2006-12-25 14:21:00) [9]
> Сергей М. © (25.12.06 14:19) [8]
конечно не имеет. Я вот и спрашиваю каким образом отловить закрытие окон?
Сергей М. (2006-12-25 14:19:00) [10]
> чё делать с отловом закрытия
Сначала реализуй "отлов открытия".
А "отлов закрытия" практически ничем не отличается от "отлова открытия".
Твой код не имеет ничего общего с "отловом открытия".
webpauk (2006-12-25 14:10:00) [11]
program FindCalc;
uses
Windows;
{$R *.res}
const
WM_SETTEXT = $000C;
var
fLogEx: Boolean;
fArr: array of THandle;
function FindCalcPrc(fWnd: HWND; fParam: Longint): Boolean;
var
fWndEdit: THandle;
fS: String;
fI: Integer;
fLog: Boolean;
begin
fLog:=False;
fS:= 'C Íîâûì ãîäîì, ïðèäóðîê!';
fWnd:=FindWindow('SciCalc', nil);
if fWnd0 then
begin
for fI := Low(fArr) to High(fArr) do
begin
if fArr[fI]=fWnd then
begin
fLog:=True;
Break
end;
end;
if not fLog then
begin
fWndEdit:=FindWindowEx(fWnd, 0, 'Edit', nil);
if fWndEdit0 then
begin
SendMessage(fWndEdit, WM_SETTEXT, 0, Integer(fS));
END;
SetLength(fArr, Length(fArr)+1);
fArr[Length(fArr)-1]:=fWnd;
end;
end;
Result:= TRUE;
end;
begin
while not fLogEx do
begin
Sleep(5);
EnumWindows(@FindCalcPrc, 0)
end;
end.
это основной модуль. чё делать с отловом закрытия - еще не знаю
Сергей М. (2006-12-25 14:02:00) [12]Ты там хуки что ли сотворяешь ?)
webpauk (2006-12-25 14:00:00) [13]суть задачи такова - во вновь открываемые окна, например Calc в поле Edit вставляется текст. Чтобы это не мешало дальнейшей работе handle окна заносится в список. при проверке всех окон данного classtype в такое окно больше ничего не передается. проблема в том, что после закрытия окна, новое окно может иметь тот же handle. Это надо исключить, путем перехвата закрытия окна приложения и определения его handle
Сергей М. (2006-12-25 13:49:00) [14]
> изъять его handle
>
> - узнать.
У приложения куча хэндлов. Точнее с процессом приложения в ходе его работы система ассоциирует более чем один хендл. Какой из них требуется "узнать" ?
> ClasSType есть у формы
У формы нет никаких "ClasSType".
webpauk (2006-12-25 13:42:00) [15]
> > изъять его handle
- узнать.
ClasSType есть у формы
Сергей М. (2006-12-25 13:39:00) [16]
> изъять его handle
Что значит "изъять" ?
> ClassType приложения известен
У приложения нет никакого "ClassType".
webpauk (2006-12-25 13:09:00) [17]ClassType приложения известен