Показать сообщение отдельно
  #5  
Старый 27.12.2011, 10:04
serebrus serebrus вне форума
Прохожий
 
Регистрация: 22.12.2011
Сообщения: 26
Репутация: 10
По умолчанию

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
. 

НО ВСЕ ТАКИ КОНТЕКСТНОЕ МЕНЮ ОТОБРАЖАЕТСЯ, как можно блокировать это?
Ответить с цитированием