![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
локальный хук из своего компонента
Diamond Cat © (2002-10-11 00:59:00)в созданом компоненте ставлю локальный хук, но что-то видимо не так так как программа умирает
вот примерный код
unit mycomponent;
interface
uses
///
type
Tmycomponent = class (TCustomControl)
protected
function MouseProc(Code, W,l : Integer): LongInt;
end;
implementation
var
HookHandle: HHOOK = 0;
constructor Tmycomponent.Create (AOwner: TComponent);
begin
inherited Create (AOwner);
end;
function tmycomponentr.MouseProc(Code, W,l : Integer): LongInt;
var
j,i:integer;
begin
if Code =HC_ACTION
then
begin
///// допустим ничего не делаем
end ;
Result :=CallNextHookEx(HookHandle, Code, W,L ); программа дохнет тут
end;
procedure Tmycomponent.CreateHandle;
var
HRegion1: THandle;
begin
inherited;
HRegion1 := CreatePolygonRgn (Pts,
sizeof (Pts) div 8, winding);
SetWindowRgn (Handle, HRegion1, True);
HookHandle := SetWindowsHookEx(WH_Mouse,@tmycomponent.MouseProc,0,GetCurrentThreadid);
end;
destructor Tmycomponent.Destroy;
begin
UnHookWindowsHookEx(HookHandle);
end;
end.
в чем проблема?
Cobalt (2002-10-16 13:37:00) [1]> Diamond Cat © (14.10.02 23:53
Нужен ли тебе именно компонент ?
Если да, то надо организовывать список компонент(своих), устанавливаешь св-ва, права и очередь получения информации от одного хука(его ставит самый первый компонент, которому надо, остальные проверяют, установлен хук уже, или нет).
В общем, возьми бумагу, ручку, и рисуй схему взаимодействия хука, компонент и всего прочего.
Diamond Cat (2002-10-14 23:53:00) [2]с этим я уже и сам разобрался теперь борюсь с тем, чтоб передать из MouseProc управление процедуре описанной в public, пока ничего умнее чем sendmessage не придумал, а грабли в том, что приходится хендл экземпляра компонента запихивать в глобальную переменную, соответственно сообщение получает только последний экземпляр, кто-нить может посоветовать более путевый подход?
Cobalt (2002-10-14 11:18:00) [3]Слона-то никто и не заметил ;)
HookHandle := SetWindowsHookEx(WH_Mouse, @tmycomponent.MouseProc, 0, GetCurrentThreadid);
Процедура, передаваемая хуку, не должна быть методом класса!(ИМХО)
Diamond Cat (2002-10-11 23:11:00) [4]не заметил там примера с локальным хуком
Song (2002-10-11 22:31:00) [5]В статьях про хук отлично работающие примеры. Лучше разбирайте их.
Diamond Cat (2002-10-11 22:29:00) [6]2 vidivспасибо конечно за совет но мне не нужен чужой компонент
2 Rouse_не понятно как это может повлиять на результат (собственно и не повлияло) :о)
2 Songрезультат все равно плачевный
блин что-же делать, пойду разбирать на запчасти TRxWindowHook :-)
Song (2002-10-11 09:14:00) [7]Вызов call-back ф-ии хука должен быть stdcall !!!
Rouse_ (2002-10-11 06:37:00) [8]W и L сделай Longint, мож отпустит ;)
vidiv (2002-10-11 06:23:00) [9]Пользуйся: TRxWindowHook!!!, Для локальных хуков