Форум: "Начинающим";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];
ВнизХуки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c