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

Вниз

Хуки   Найти похожие ветки 

 
NoSilence   (2010-06-11 21:04) [0]

Задача:
Написать .dll с панелью. Эта панель будет запускаться другой программой, передавая ей хэндл чужого окна. Панель должна следовать, сворачиваться и разворачиваться с этим окном.

Я знаю, что это делается через хуки. Написал все это дело. Сделал проверку на активацию окна. Все было круто, пока не передал хэндл чужого окна. В интернете я прочитал, что для глобального хендла нужна отдельная dll с хуком. Собственно вопрос в том, как мне это все оформить?

Создал длл с кодом:
library Control;

uses
 Windows;

var
 Hook: HHook;
 hPanel, hClient: HWND;

function HookProc(nCode: integer; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall;
begin
result:= CallNextHookEx(Hook, nCode, wParam, lParam);
if wParam = hClient then
 case nCode of
   HCBT_ACTIVATE: ShowWindow(hPanel, SW_SHOWNOACTIVATE);
 {  HCBT_MOVESIZE: begin
       GetWindowRect(hClient, ClientRect);
       SetWindowPos(hPanel, hClient,
         ClientRect.Left, ClientRect.Top,
         Width, Height, HWND_TOPMOST);
     end;
  // HCBT_SYSCOMMAND: MessageBox(hPanel, pchar(inttostr(lParam)), 0, MB_OK); }
 end;
end;

procedure HookOn(OnOff: boolean; Panel, Client: HWND); stdcall;
begin
hPanel:= Panel;
hClient:= Client;
if OnOff then
 Hook:= SetWindowsHookEx(WH_CBT, @HookProc, HInstance, 0)
else
 UnhookWindowsHookEx(Hook);
end;

exports HookOn;

begin
end.


И патался передать ей hookproc из длл панели, но ничего не получилось. Возможно я что-то делаю не так. Именно за этим я и обратился за помощью. Потом решил передать в длл хука хэндлы окон (код выше).

HDLL:= LoadLibrary(PChar("control.dll"));
if HDLL > HINSTANCE_ERROR then begin
  @HookOn:= GetProcAddress(HDLL, "HookOn");
  HookOn(true, hPanel, hClient);
end;


Раньше хотя для своего окна срабатывал хук, теперь вообще не работает. hClient - существует и передается с главной формы.


 
NoSilence   (2010-06-11 21:23) [1]

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


 
KilkennyCat ©   (2010-06-11 21:56) [2]

топ, лефт.


 
NoSilence   (2010-06-11 22:29) [3]

Нет, как определить что окно сместилось через хук и в проце перетащить дополнительное окно?


 
NoSilence   (2010-06-11 22:29) [4]

мл*, походу проще поставить таймер с проверкой координат...



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

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

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1276810212
Юрий
2010-06-18 01:30
2010.09.12
С днем рождения ! 18 июня 2010 пятница


2-1276727283
TechnoDreamer
2010-06-17 02:28
2010.09.12
Zoom в TWebBrowser (обработка мыши)


15-1273957893
NailMan
2010-05-16 01:11
2010.09.12
Свершилось чудо Маниту


2-1276497223
tippa
2010-06-14 10:33
2010.09.12
про 2 потока и общий стринглист


15-1276520714
AKE
2010-06-14 17:05
2010.09.12
Что такое atom?