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




Вниз

Как отловить правый клик мышки... 


pin   (2001-12-18 19:19) [0]

Надо отловить правый клик мыши,но не у себя в приложении, а где угодно..



Вадим   (2001-12-18 21:39) [1]

В dll: SetWindowsHookEx(WH_MOUSE...);



Dimaond Cat   (2001-12-19 00:52) [2]

library Mouse;

uses
Windows,
Messages;
var
HookHandle: HHOOK = 0;

//функция обрабатывающая сообщения (мышиные)
function MouseProc(Code, W,l : Integer): LongInt; stdcall;
var
j,i:integer;
begin
if Code =HC_ACTION
then
begin
//составляем дополнительные параметры для нашего сообщения.
i:=makelparam(TMOUSEHOOKSTRUCT(Pointer(L)^).pt.x,TMOUSEHOOKSTRUCT(Pointer(L)^).pt.y);
j:=makeWparam(TMOUSEHOOKSTRUCT(Pointer(L)^).hwnd,w);
//отправляем сообщение наше программе.
SendMessage(FindWindow(nil,"MouseHook"), WM_USER,j ,i); // Уведомляем программу об этом.
end;
Result := CallNextHookEx(HookHandle, Code, W,L )
end;

function SetHook: LongBool; stdcall;
begin
//установка ловушки
HookHandle := SetWindowsHookEx(WH_Mouse, MouseProc, HInstance, 0);
Result := HookHandle <> 0 ;
end;

function RemoveHook: LongBool; stdcall;
begin
Result := UnHookWindowsHookEx(HookHandle)
//снятие ловушки
end;
exports
SetHook, RemoveHook; //экспортируемые функции
begin
end.

название окна запускающей программы должно быть соответственно MouseHook

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Forms,
Controls, StdCtrls, Classes;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
procedure user(var message:Tmessage) ; message wm_user;
{ Public declarations }
end;

var
Form1: TForm1;
function SetHook:longbool;stdcall; external "mouse" ;
function RemoveHook:longbool;stdcall; external "mouse" ;
// можно конечно и динамически подключать длл, но мне больше нравится так.
implementation
var
i:integer=0;
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Caption:="MouseHook"; // длл посылает сообщения нашему окну, ореинтируясь
//на его название
SetHook;// включаем ловушку, тут по идее надо бы сделать проверку запустилась она или нет
//т.е. если эта функция фернула False то ловушка не включилась.
end;

procedure tForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
RemoveHook;// не забываем выключить ловушку по завершению программы
end;

procedure TForm1.user(var message:Tmessage);
{Эта процедура срабатывает каждый раз, когда в нашей библиотеке
проходит мышиное сообщение, соответственно тут можно просматривать какое сообщение
прошло, также это можно сделать и в самой длл-ке }
var
c:array [0..max_path] of char;
begin
i:=i+1;
label1.Caption:="К данному моменту мышь намотала "+inttostr(i)+" пикселей";
label2.Caption:="Координаты мыши по горизонтали = "+inttostr(message.LParamLo);
label3.Caption:="Координаты мыши по вертикали = "+inttostr(message.LParamHi);
label4.caption:="Дескриптор окна под мышью = "+inttostr(message.Wparamlo);
GetWindowText(message.Wparamlo,c,Sizeof(c));
label5.Caption:="Название окна под мышью = "+c;
GetClassName(message.Wparamlo,c,Sizeof(c));
label6.Caption:="Название класса окна под мышью = "+c;
Label7.Caption:=inttostr(message.WParamHi);
{как видно из показаний лейблов можно отслеживать любые сообщения лейбл №7 показывает
(в десятичном представлении) номер сообщения, в файле messages, если в него заглянуть,
можно увидить какому сообщению соответствует данное цифровое сочетание, только там
эти сочетания представленны в 16-ричном представлении}
end;
{Вобще-то если это должна быть программа типа шпиона , то лучше
делеать ее не используя VCL, тогда ее размер будет минимальным.}
end.



pin   (2001-12-20 13:17) [3]

THX. Только я не понял зачем создавать отдельную Dll`ку. Ну да ладно, разберусь....




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




Наверх





Память: 0.73 MB
Время: 0.028 c
1-57055           Dim                   2002-02-04 13:21  2002.02.18  
Что такое TAddTeeFunction ?


14-57204          Иван Шихалев          2001-12-27 20:20  2002.02.18  
Насколько быстрее borlndmm.dll выделяет и освобождает память, чем функции WinAPI?


3-56978           kengura               2002-01-23 11:37  2002.02.18  
Работа с текстовым BLOB полем


1-57093           Lvovich               2002-02-02 09:07  2002.02.18  
Модальные окна


3-57001           jenbond               2002-01-24 09:48  2002.02.18  
защита