Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.055 c
15-1176554505
=Guest=
2007-04-14 16:41
2007.05.13
глава ЕС


10-1123757517
kblc
2005-08-11 14:51
2007.05.13
Связь с сервером


2-1177006647
Sapan
2007-04-19 22:17
2007.05.13
Удалить символ из поля


15-1176234849
Knight
2007-04-10 23:54
2007.05.13
Как в таблице Access ключевое, автоинкрементное поле (Счётчик)&amp;#133


15-1176568483
GeLLeR
2007-04-14 20:34
2007.05.13
Не могу установить C++ Builder





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