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

Вниз

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

 
Anubi$$$ ©   (2006-06-29 13:08) [0]

Почему-то хук получается не глобальным?
что я не так делаю? :)


library hook;

uses
 SysUtils,
 Classes,
 Windows,
 Messages;

var MHook:HHook = 0;
   MLeftBottonStatus:boolean=false;
   MRightBottonStatus:boolean=false;

{$R *.res}

function HCallBack(code : integer; wParam : wParam; lParam : longint) : longint; stdcall;
begin
 MLeftBottonStatus := false;
 MRightBottonStatus := false;

 if wParam = WM_LBUTTONDOWN then MLeftBottonStatus := true;
 if wParam = WM_RBUTTONDOWN then MRightBottonStatus := true;

 Result := CallNextHookEx(MHook, Code, wParam, lParam);
end;

procedure GLMHook(switch:boolean) export; stdcall;
begin
 if switch then MHook := SetWindowsHookEx(WH_MOUSE, @HCallBack, hInstance, 0)
   else begin UnhookWindowsHookEx(MHook); MHook := 0; end;
end;

exports GLMHook;

begin

end.


 
Anubi$$$ ©   (2006-06-29 13:48) [1]

второй вариант, после прочтения статьи о хуке ...
резальтат, то же :) ... :(((


library hook;

uses
 SysUtils,
 Classes,
 Windows,
 Messages;

type PGlobalDLLData = ^TGlobalDLLData;
     TGlobalDLLData = packed record MHook: HWND; end;

const MMFName:PChar = "CLHookMFFName";

var GlobalData: PGlobalDLLData;
    MMFHandle: THandle;
    MLeftBottonStatus:boolean=false;
    MRightBottonStatus:boolean=false;

{$R *.res}

function HCallBack(code : integer; wParam : Word; lParam : longint) : longint; stdcall;
begin
 MLeftBottonStatus := false;
 MRightBottonStatus := false;

 if wParam = WM_LBUTTONDOWN then MLeftBottonStatus := true;
 if wParam = WM_RBUTTONDOWN then MRightBottonStatus := true;

 Result := CallNextHookEx(GlobalData^.MHook, Code, wParam, lParam);
end;

procedure GLMHook(switch:boolean) export; stdcall;
begin
 if switch then GlobalData^.MHook := SetWindowsHookEx(WH_MOUSE, @HCallBack, hInstance, 0)
   else begin UnhookWindowsHookEx(GlobalData^.MHook); GlobalData^.MHook := 0; end;
end;

procedure OpenGlobalData();
begin
 MMFHandle := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);
 if MMFHandle <> 0 then
   begin
    GlobalData := MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
    if GlobalData = nil then CloseHandle(MMFHandle);
   end;
end;

procedure CloseGlobalData();
begin
 UnmapViewOfFile(GlobalData);
 CloseHandle(MMFHandle);
end;

procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
 case dwReason of
   DLL_PROCESS_ATTACH: OpenGlobalData;
   DLL_PROCESS_DETACH: CloseGlobalData;
 end;
end;

exports GLMHook;

begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.



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

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

Наверх




Память: 0.47 MB
Время: 0.028 c
6-1141675738
NKVDwnik
2006-03-06 23:08
2006.07.16
IIS


2-1151512255
129
2006-06-28 20:30
2006.07.16
Excel


6-1141869741
AleKo
2006-03-09 05:02
2006.07.16
idPOP3


2-1151354245
SergNic
2006-06-27 00:37
2006.07.16
о возможностях Delphi 2006 Prof


8-1138713098
example
2006-01-31 16:11
2006.07.16
Обработка JPEG