Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.004 c
15-1276348839
Дмитрий С
2010-06-12 17:20
2010.09.12
Помогите рассчитать сопротивление.


2-1276275861
NoSilence
2010-06-11 21:04
2010.09.12
Хуки


15-1274256143
12
2010-05-19 12:02
2010.09.12
Помогите пропатчить dll. Обход ошибочного кода. Не взлом!


15-1276699817
Scot Storch
2010-06-16 18:50
2010.09.12
функции и процедуры


2-1275858326
HRustBB
2010-06-07 01:05
2010.09.12
Как залить TImage TBitmap-ом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский