Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
1-93142
kull
2002-11-15 17:11
2002.11.28
Вопрос по MS Word...


1-93137
MetalFan
2002-11-18 10:35
2002.11.28
как узнать версию MS Office?


1-93123
X-Guest...
2002-11-14 21:56
2002.11.28
Помогите... Help...


7-93272
max2057
2002-09-23 15:36
2002.11.28
Копирование файла в администр.ресурс


6-93178
jumper
2002-07-24 09:02
2002.11.28
TServerSocket





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский