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

Вниз

Hook   Найти похожие ветки 

 
gary   (2006-12-14 16:28) [0]

Поставил  локальный  hook  на  wm_rbuttondown  для форми,  и аннулировал  это  сообщение,
но  компонент  webbrowser  при ссылке  на  html  документ  делает  ошибку  типа:  слишком много последовательные исключения, как  избавится от этои ошибки


 
Eraser ©   (2006-12-14 16:31) [1]

> [0] gary   (14.12.06 16:28)

код в студию.


 
gary   (2006-12-15 17:41) [2]

library hook_dll1;

uses
 Windows,
 Messages,
 Forms,
 ShDocVw,
 controls,
 Unit1 in "Unit1.pas" {Form1};

const
 MMFName: PChar = "MyMMF";
type
 PGlobalDLLData = ^TGlobalDLLData;
 TGlobalDLLData = packed record
   SysHook: HWND;
 end;

var
 GlobalData: PGlobalDLLData;
 MMFHandle: THandle;

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin

 if code = HC_ACTION then
 begin
   if TMsg(Pointer(lParam)^).message = WM_RBUTTONDOWN then
   begin
        MessageBox( 0, "Ther is no any context!", "Message from HookDll", 0 );
    TMsg(Pointer(lParam)^).message := WM_NULL;
   end;
 end;
   Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);

end;

procedure hook(switch : Boolean) export; stdcall;
begin

 if switch=true then
 begin
      GlobalData^.SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance,
                           GetWindowThreadProcessId(FindWindow("TForm1", "Form1"), nil ));
   if GlobalData^.SysHook <> 0 then
       MessageBox(0, "HOOK1 &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#235;&#229;&#237; !", "Message from Process1", 0)
     else
       MessageBox(0, "HOOK1 &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#237;&#229; &#243;&#228;&#224;&#235;&#238;&#241;&#252; !", "Message from Process1", 0);

 end
 else
 begin

       if UnhookWindowsHookEx(GlobalData^.SysHook) then
     MessageBox(0, "HOOK1 &#241;&#237;&#255;&#242; !", "Message from Process1", 0)
   else
     MessageBox(0, "HOOK1 &#241;&#237;&#255;&#242;&#252; &#237;&#229; &#243;&#228;&#224;&#235;&#238;&#241;&#252; !", "Message from Process1", 0);

 end;
end;

procedure OpenGlobalData();
begin
 SizeOf(TGlobalDLLData), MMFName);
 MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);

 if MMFHandle = 0 then
   MessageBox(0, "Can""t create FileMapping", "Message from Process1", 0);

 
 GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
 if GlobalData = nil then
   begin
     CloseHandle(MMFHandle);
     MessageBox(0, "Can""t make MapViewOfFile", "Message from Process1", 0);
   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 hook;

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

/////////////////////////////////////////////////////////////////////////////////////

от туда  вызывается этот dll

type
 MyProcType = procedure (flag : Boolean); stdcall;

procedure TForm1.Button1Click(Sender: TObject);
var
 hook: MyProcType;
begin

 @hook:= nil;

 Hdll:= LoadLibrary(PChar("hook_dll1.dll"));
 if Hdll > HINSTANCE_ERROR then            
   begin
     @hook:=GetProcAddress(Hdll, "hook");    
     Button2.Enabled:=True;
     Button1.Enabled:=False;
     hook(true);
   end
 else
   ShowMessage("&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#231;&#224;&#227;&#240;&#243;&#231;&#234;&#229; DLL !");

end;

procedure TForm1.Button2Click(Sender: TObject);
var
 hook: MyProcType;
begin
 @hook:= nil;
 if Hdll > HINSTANCE_ERROR then
   begin                                      
  @hook:=GetProcAddress(Hdll, "hook");      
     Button1.Enabled:=True;
     Button2.Enabled:=False;
     hook(false);                          
   end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

 FreeLibrary(Hdll);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 WebBrowser1.Navigate("d:\untitled1.html");

end;


 
Eraser ©   (2006-12-15 18:54) [3]

> [2] gary   (15.12.06 17:41)

попробуй заменить

>       MessageBox(0, "HOOK1 onoaiiaeou ia oaaeinu !", "Message
> from Process1", 0);

на

 Result := 1;
 Exit;


> uses
> Windows,
> Messages,
> Forms,
> ShDocVw,
> controls,
> Unit1 in "Unit1.pas" {Form1};

поудаляй лишнее из dll, здесь оно абсолютно не к чему.


 
MetalFan ©   (2006-12-15 19:26) [4]


> procedure OpenGlobalData();
> begin
>  SizeOf(TGlobalDLLData), MMFName); ЧЕЭТО????
>  MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil,
>  PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);


 
gary   (2006-12-16 15:30) [5]

заменa

      MessageBox(0, "HOOK1 onoaiiaeou ia oaaeinu !", "Message
      from Process1", 0);

на

Result := 1;
Exit;

к сожалению не помогает, может система не терпит что та

к сожалению не помогает, может  система не терпит что та


 
gary   (2006-12-16 15:49) [6]

procedure OpenGlobalData();

для передач данних остальним хукам на тот же сообщение



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

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

Наверх




Память: 0.49 MB
Время: 0.055 c
15-1176738143
фывов
2007-04-16 19:42
2007.05.13
А чем можно замерить скорость набора?


2-1177054105
Steep
2007-04-20 11:28
2007.05.13
Юниты


15-1176397529
DillerXX
2007-04-12 21:05
2007.05.13
Что делать в Киеве?


15-1176376503
Kerk
2007-04-12 15:15
2007.05.13
Mail::POP3Client


15-1176673655
Германн
2007-04-16 01:47
2007.05.13
{$IFDEF } и {$IFNDEF}