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

Вниз

Хук не глобальный   Найти похожие ветки 

 
Dimaond Cat   (2002-04-20 23:02) [0]

Вопрос примерно такой, пытаюсь создать компонент который отрабатывалбы сообщения от мыши
проходящие в моей программе и на всех кмпонентах находящихся в окне программы.
Ставить глобальный хук, как мне подсказали, в данном случае, не корректно
поэтому стал ставить хук на этот процесс, но программу все время вышибает,
вот примерный код, помогите где ошибка
type
TComponent= class (TCustomControl)
...
protected
...
function MouseProc(Code, W,l : Integer): integer; stdcall;
...
implementation

var
CompCount: integer = 0;
Hook: HHOOK = 0;
....

procedure TComponent.Create (AOwner: TComponent);
begin
...
if not (csDesigning in ComponentState) then
begin
Inc(CompCount);
if CompCount = 1 then Hook := SetWindowsHookEx(WH_MOUSE,@TComponent.MouseProc, 0, GetCurrentThreadid);
end
end;


function TComponent.MouseProc(Code, W,l : Integer):integer; stdcall;
begin
MouseProc:=CallNextHookEx(Hook, Code, W,L )
end;


 
StAL   (2002-04-22 19:23) [1]

Вы ставите хук прямо в компоненте. Это не корректно, хук нужно ставить в DLL. В сатье "Hooks - Аспекты реализации" на этом сайте подробно рассказано о глобальных ловушках.
Если же у Вас все-таки не получится, пишите мне на
stalcom@ukr.net

С уважением, StAL


 
Fantasist   (2002-04-22 22:49) [2]

>StAL © (22.04.02 19:23)

По моему там достаточно ясно сказанно, что хук не глобальный.

Ошибка первым делом в том, что передается адрес метода класса. Метод класса получает указатель на экземпляр класса при вызове, а в функции MouseProc его не преполагается. Это может накрыть стек.

И честно говоря, мне кажется слегка странноватым переопределять стандартный класс TComponent.



 
Dimaond Cat   (2002-04-24 00:32) [3]

2 Fantasist на самом деле я не заменял стандартный Tcomponent, просто я его так назвал в конкретно этом примере. Ошибка похоже именно в том что наедается стек

>> Метод класса получает указатель на экземпляр класса при вызове, а в функции MouseProc его не преполагается.

Как это лечить если не сложно пример


 
Deus   (2002-04-24 14:26) [4]

2Dimaond Cat © (20.04.02 23:02):
А OnMouseMove?


 
Dimaond Cat   (2002-04-24 21:12) [5]

2 Deus по некоторым причинам onmousemove мне не подходит, одна из причин что компонент должен откликаться на движения мыши не только над собой но и над другими объектами находящимися в окне моей программыю


 
Gayrus   (2002-04-25 03:04) [6]

TComponent.MouseProc - по моему дело в этом, hook не может являться потомком какого-то класса.


 
Dimaond Cat   (2002-04-25 23:30) [7]

Если это так то очень плохо.



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

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

Наверх





Память: 0.46 MB
Время: 0.007 c
1-77362
Jony
2002-06-13 11:47
2002.06.24
Выделение символов быстрого запуска в меню.


3-77258
Stocker !
2002-05-20 10:23
2002.06.24
Как перестроить Query на другой альяс?


3-77275
roadstar
2002-05-30 13:12
2002.06.24
SQL-запрос


3-77254
Fissher
2002-05-29 16:43
2002.06.24
Чтение из ini - файла


1-77388
Tkach_
2002-06-13 13:36
2002.06.24
Ошибка доступа при работе с потоками/нитями





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