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

Вниз

Нужно чтобы хук работал по всей системе....   Найти похожие ветки 

 
Camedia   (2003-08-30 22:18) [0]

Я запускаю в приложении хук таким образом:

SetWindowsHookEx(WH_MOUSE, @HookProc, HInstance, 0);

Но он работает только в пределах формы. Можно ли сделать его рабочим на всём экране, при этом не запихивая его в DLL???


 
Yanis ©   (2003-08-30 22:43) [1]

Ты просто что то неправильно делаешь, всё должно работать.


 
Camedia   (2003-08-30 22:54) [2]

Я пытаюсь сделать что-то вроде пипетки. Код хукового фильтра такой:

function HookProc(Code: Integer; wParam: Word; lParam: Longint): Longint;
var msg : PMouseHookStruct;
begin
if Code < 0 then
begin
result := CallNextHookEx(OurHook, Code, wParam, lParam);
exit;
end;

msg := PMouseHookStruct(lParam);
if (wParam=WM_LBUTTONDOWN) then
begin
UnHookWindowsHookEx(ourHook);
result := -1;
Case MouseHookFrom of
1: begin
formMaskMaker.fbPickTransparentColor.Down := False;
formMaskMaker.fpTransparentColorSample.Color := GetPixel(GetDC(0), Msg^.pt.x, Msg^.pt.y);
end;
2: begin
formMaskMaker.fbPickMaskOuterColor.Down := False;
formMaskMaker.fpMaskOuterColorSample.Color := GetPixel(GetDC(0), Msg^.pt.x, Msg^.pt.y);
end;
3: begin
formMaskMaker.fbPickMaskImageColor.Down := False;
formMaskMaker.fpMaskImageColorSample.Color := GetPixel(GetDC(0), Msg^.pt.x, Msg^.pt.y);
end;
end;
MouseHookFrom := 0;
end
else
result := CallNextHookEx(ourHook, Code, wParam, lParam);
end;

К сожалению, если я щёлкаю вне формы, то хук не срабатывает (т.е. остаётся рабочим, потом можно щёлкнуть по форме и всё срабатывает).


 
Германн ©   (2003-08-31 02:54) [3]

> Camedia (30.08.03 22:18)
>Можно ли сделать его рабочим на всём экране, при этом не >запихивая его в DLL???

НИЗЗЗЯ! Читай умные книжки, статьи (в т.ч. на данном сайте).


 
Юрий Зотов ©   (2003-08-31 08:37) [4]

И кроме того, не забудьте про stdcall и глобальные данные.


 
Camedia   (2003-08-31 17:50) [5]

>И кроме того, не забудьте про stdcall и глобальные данные.

stdcall - это понятно, а что имеется ввиду под "глобальными данными"????


 
nikkie ©   (2003-08-31 19:23) [6]

имхо хуки здесь не особо нужны.

procedure WMLButtonDown(var Message: TMessage); message WM_LBUTTONDOWN;
procedure WMCaptureChanged(var Message: TMessage); message WM_CAPTURECHANGED;

procedure TForm1.Button1Click(Sender: TObject);
begin
Mouse.Capture := Handle;
end;

procedure TForm1.WMLButtonDown(var Message: TMessage);
var
p: TPoint;
begin
if Mouse.Capture <> Handle then Exit;
Mouse.Capture := 0;
p.X := Short(LoWord(Message.LParam));
p.Y := Short(HiWord(Message.LParam));
p := ClientToScreen(p);
ShowMessage(inttostr(p.X) + ", " + inttostr(p.Y));
end;

procedure TForm1.WMCaptureChanged(var Message: TMessage);
begin
end;


 
Camedia   (2003-08-31 20:26) [7]

А вот это уже дело...



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
3-41109
KA_
2003-10-23 09:06
2003.11.13
Проверка существования таблицы Interbase


14-41882
Ysaev Grigoriy
2003-10-21 16:47
2003.11.13
Програмирование как искусство.


3-40830
geg
2003-10-22 09:25
2003.11.13
IBQuery1 filds то F_1 to SUM


14-42043
Marser
2003-10-14 00:22
2003.11.13
Панове!


14-42009
Vlad Oshin
2003-10-24 10:12
2003.11.13
Никто не в курсе куда Outlook пишет блокируемые адреса?