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

Вниз

локальный хук из своего компонента   Найти похожие ветки 

 
Diamond Cat ©   (2002-10-11 00:59) [0]

в созданом компоненте ставлю локальный хук, но что-то видимо не так так как программа умирает
вот примерный код

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.

в чем проблема?


 
vidiv   (2002-10-11 06:23) [1]

Пользуйся: TRxWindowHook!!!, Для локальных хуков


 
Rouse_ ©   (2002-10-11 06:37) [2]

W и L сделай Longint, мож отпустит ;)


 
Song ©   (2002-10-11 09:14) [3]

Вызов call-back ф-ии хука должен быть stdcall !!!


 
Diamond Cat ©   (2002-10-11 22:29) [4]

2 vidiv спасибо конечно за совет но мне не нужен чужой компонент

2 Rouse_ не понятно как это может повлиять на результат (собственно и не повлияло) :о)

2 Song результат все равно плачевный

блин что-же делать, пойду разбирать на запчасти TRxWindowHook :-)


 
Song ©   (2002-10-11 22:31) [5]

В статьях про хук отлично работающие примеры. Лучше разбирайте их.


 
Diamond Cat ©   (2002-10-11 23:11) [6]

не заметил там примера с локальным хуком


 
Cobalt ©   (2002-10-14 11:18) [7]

Слона-то никто и не заметил ;)
HookHandle := SetWindowsHookEx(WH_Mouse, @tmycomponent.MouseProc, 0, GetCurrentThreadid);
Процедура, передаваемая хуку, не должна быть методом класса!(ИМХО)


 
Diamond Cat ©   (2002-10-14 23:53) [8]

с этим я уже и сам разобрался теперь борюсь с тем, чтоб передать из MouseProc управление процедуре описанной в public, пока ничего умнее чем sendmessage не придумал, а грабли в том, что приходится хендл экземпляра компонента запихивать в глобальную переменную, соответственно сообщение получает только последний экземпляр, кто-нить может посоветовать более путевый подход?


 
Cobalt ©   (2002-10-16 13:37) [9]

> Diamond Cat © (14.10.02 23:53
Нужен ли тебе именно компонент ?
Если да, то надо организовывать список компонент(своих), устанавливаешь св-ва, права и очередь получения информации от одного хука(его ставит самый первый компонент, которому надо, остальные проверяют, установлен хук уже, или нет).
В общем, возьми бумагу, ручку, и рисуй схему взаимодействия хука, компонент и всего прочего.



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
3-92906
Kurt
2002-11-10 13:14
2002.11.28
Что означает эта ошибка при попытке обновить таблицу Query BDE


3-92931
чайник2002
2002-11-12 03:14
2002.11.28
Документы Word в таблице Oracle


1-93107
doublebug
2002-11-15 12:11
2002.11.28
COM и IGlobalInterfaceTable


1-93055
----
2002-11-19 14:43
2002.11.28
TComObject


1-92983
BOBAH
2002-11-18 12:50
2002.11.28
Работа с ресурсами!