Bargest, по книге "Delphi-Глазами хакера" нашел готовый код и изменил его для Калькулятора (результат: в калькуляторе не должна "нажиматься" правая кнопка мыши) так:
PHP код:
var
Form1: TForm1;
wnd: HWND;
b: Boolean;
procedure RunStopHook(State : Boolean; Wnd: HWND) stdcall;
external 'hackpass.dll' index 1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
wnd:=FindWindow(nil, 'Calculator');
if wnd<>0 then
begin
b:=True;
RunStopHook(True, wnd);
ShowMessage('Find');
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if b then RunStopHook(False, wnd);
end;
end.
Вот сама библиотека:
PHP код:
library hackpass;
uses Windows, Messages;
var
SysHook : HHook = 0;
Wnd : Hwnd = 0;
hd : HWND = 0;
function SysMsgProc(code : integer; wParam : word;
lParam : longint) : longint; stdcall;
begin
CallNextHookEx(SysHook, Code, wParam, lParam);
if code = HC_ACTION then
begin
Wnd := TMsg(Pointer(lParam)^).hwnd;
if (TMsg (Pointer (lParam)^).message = WM_RBUTTONDOWN) and (Wnd=hd) then
SendMessage(Wnd, WM_CANCELMODE, 0, 0);
//НО ВСЕ ТАКИ КОНТЕКСТНОЕ МЕНЮ ОТОБРАЖАЕТСЯ
end;
end;
procedure RunStopHook(State: Boolean; h: HWND) export; stdcall;
begin
if State=true then
begin
hd:=h;
SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
end else
begin
UnhookWindowsHookEx(SysHook) ;
SysHook := 0;
end;
end;
exports RunStopHook index 1;
begin
end.
НО ВСЕ ТАКИ КОНТЕКСТНОЕ МЕНЮ ОТОБРАЖАЕТСЯ, как можно блокировать это?