Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
ВнизПерехват закрытия приложения Найти похожие ветки
← →
webpauk (2006-12-25 13:09) [0]Подскажите как перехватить закрытие приложения и изъять его handle.
Пример очень желателен
← →
webpauk (2006-12-25 13:09) [1]ClassType приложения известен
← →
Сергей М. © (2006-12-25 13:39) [2]
> изъять его handle
Что значит "изъять" ?
> ClassType приложения известен
У приложения нет никакого "ClassType".
← →
webpauk (2006-12-25 13:42) [3]
> > изъять его handle
- узнать.
ClasSType есть у формы
← →
Сергей М. © (2006-12-25 13:49) [4]
> изъять его handle
>
> - узнать.
У приложения куча хэндлов. Точнее с процессом приложения в ходе его работы система ассоциирует более чем один хендл. Какой из них требуется "узнать" ?
> ClasSType есть у формы
У формы нет никаких "ClasSType".
← →
webpauk (2006-12-25 14:00) [5]суть задачи такова - во вновь открываемые окна, например Calc в поле Edit вставляется текст. Чтобы это не мешало дальнейшей работе handle окна заносится в список. при проверке всех окон данного classtype в такое окно больше ничего не передается. проблема в том, что после закрытия окна, новое окно может иметь тот же handle. Это надо исключить, путем перехвата закрытия окна приложения и определения его handle
← →
Сергей М. © (2006-12-25 14:02) [6]Ты там хуки что ли сотворяешь ?)
← →
webpauk (2006-12-25 14:10) [7]
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 fWnd<>0 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 fWndEdit<>0 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:19) [8]
> чё делать с отловом закрытия
Сначала реализуй "отлов открытия".
А "отлов закрытия" практически ничем не отличается от "отлова открытия".
Твой код не имеет ничего общего с "отловом открытия".
← →
webpauk (2006-12-25 14:21) [9]
> Сергей М. © (25.12.06 14:19) [8]
конечно не имеет. Я вот и спрашиваю каким образом отловить закрытие окон?
← →
Сергей М. © (2006-12-25 14:25) [10]Таким же образом, каким и "открытие окон" - установкой хука на эти конкретные события.
← →
trubin © (2006-12-25 14:25) [11]Окон твоей программы ?
← →
Сергей М. © (2006-12-25 14:32) [12]
> trubin © (25.12.06 14:25) [11]
Окна экземпляров виндового калькулятора он пасёт)
← →
webpauk (2006-12-25 14:32) [13]
> trubin © (25.12.06 14:25) [11]
окна чужой программы.
> Сергей М. © (25.12.06 14:25) [10]
если не тяжело пример
← →
Сергей М. © (2006-12-25 14:35) [14]На этом сайте в статьях вроде бы имеются примеры инсталляции глоб.хуков.
Да и гугль со справкой еще не усохли - см. SetWindowsHookEx
← →
webpauk (2006-12-25 14:36) [15]
> Сергей М. © (25.12.06 14:35) [14]
гугль с яндехом хороши, а мне надо конкретно на закрытие. вот и прошу пример
← →
Сергей М. © (2006-12-25 14:41) [16]
> webpauk (25.12.06 14:36) [15]
Там и найдешь и "конкретно" и не очень.
← →
trubin © (2006-12-25 15:17) [17]А как ты отлавливаешь открытие? Если запускаешь сам, или периодически перебираешь процессы, то у тебя есть ИД процесса, если перебираешь окна, то по хендлу окна с помощью GetWindowThreadProcessId опять можно получить ИД процесса, по ИД получаешь хэндл процесса, и ставишь на ожидание в отдельном потоке WaitForSingleObject или WaitForMultipleObjects.
Если интересующих окон несколько в одном процессе, то тогда SetWindowsHookEx + WH_SHELL + HSHELL_WINDOWDESTROYED, ну ДЛЛ-ку конечно писать придется.
В инете по хукам масса информации в т.ч. и с примерами.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.015 c