Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нужно в хуке получить Application.Handle [D7, Win95/98, WinME, NT4, Win2k, WinXP]


OlegM ©   (2004-05-19 09:38:00) 

Привет всем!
Как в хуке получить тоже значение что и Application.Handle, делаю FindWindow дак он другое возвращает, в чем траблы?


OlegM   (2004-05-19 12:56:00) [1]

Спасибо))) заробило


Digitman   (2004-05-19 12:40:00) [2]


> OlegM ©   (19.05.04 11:53) [4]


> незнаю что такое MMF


ты статью на этом сайте про глоб.хуки прочитал ? вник, что там и зачем ?


> дак он другое возвращает


> что добавить и исправить


дак ты и не ищешь главное окно аппликации, ты ищешь окно одной из форм этой аппликации

имя класса окна аппликации - 'TApplication'
имя окна аппликации - 'MyApp', где MyApp - имя исп.файла твоей аппликации (без расширения)

скажем, если исп.файл твоей аппликации называется MyApp.exe, то поиск гл.окна этой аппликации должен выглядеть хотя бы вот так:

FindWindow('TApplication', 'MyApp');


OlegM   (2004-05-19 11:53:00) [3]

Я ненастолько еще в этом силен можно поподробней вот, например незнаю что такое MMF, у меня так подскажите что добавить и исправить, а то уже посинею скоро

var
 H,H1:THandle;

procedure sethook;
begin
 H:= SetWindowsHookEx(WH_KEYBOARD, hook, hInstance, 0);
 if H = 0 then
   messageBox(0,'Ой','ERROR',mb_iconhand);
end;

и сама функция

function hook(c0de, wParam, lParam : integer): Lresult; stdcall;
begin
 if c0de >= 0 then
 begin
   if wParam = VK_ESCAPE then
   begin
     H1:=Findwindow('TForm1',nil);
     if IsIconic(H1)=false then
       PostMessage(H1,WM_SYSCOMMAND,SC_MINIMIZE,0)  ;
     else
       PostMessage(H1,WM_SYSCOMMAND,SC_RESTORE,0)  ;
   end;
   Result:=0;
 end
 else
   Result:=CallNextHookEx(H, c0de, wParam, lParam);
End;


Digitman   (2004-05-19 10:26:00) [4]


> OlegM ©   (19.05.04 10:08) [2]



> нужно управлять окном из dll


ты устанавливаешь глобальныйхук ? ну так и передай нужный хэндл через MMF ! Зачем же всякий раз вновь окно искать, если оно никуда не делось ?

реализуй и экспортируй в хук-ДЛЛ процедуру

SetHook(Active: Boolean; hWnd: THandle);

хост-приложение, устанавливающее хук, вызывает эту ф-цию, передавая ей параметры Active = True и hWnd = Application.Handle

в теле ф-ции, прежде чем вызывать SetWindowsHookEx(), создаешь MMF и записываешь туда значение параметра hWnd ... каждый экз-р хук-ДЛЛ, который будет внедряться в АП каждого GUI-процесса, при инициализации получает управление, где из MMF считывается эначение хэндла и запоминается в стат.переменной , с тем чтобы хук-ф-ция, будучи вызыванной в момент хук-события, могла преспокойно взять этот хэндл из стат.переменной и использовать его для работы с этим окном


OlegM   (2004-05-19 10:08:00) [5]

в функции, в dllке мне нужно управлять окном из dll


Digitman   (2004-05-19 09:54:00) [6]


> Как в хуке

что значит "в хуке" ? в теле функции, которая указана при вызове SetWindowsHookEx() ? или где ?

и зачем вообще Application.Handle понадобился там ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо