Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 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`ку. Ну да ладно, разберусь....



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

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

Наверх




Память: 0.46 MB
Время: 0.004 c
4-57255
Tosov
2001-12-18 00:46
2002.02.18
THandle


4-57268
Serguar
2001-12-18 09:54
2002.02.18
список функций из DLL


14-57213
Undert
2001-12-29 15:29
2002.02.18
Windows XP


6-57165
Zharik
2001-11-28 12:41
2002.02.18
Как в Delphi пройти через прокси-сервер, в котором есть имя и пароль?


3-56977
Laimer
2002-01-23 13:13
2002.02.18
TDBGrid





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