Форум: "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 óñòàíîâëåí !", "Message from Process1", 0)
else
MessageBox(0, "HOOK1 óñòàíîâèòü íå óäàëîñü !", "Message from Process1", 0);
end
else
begin
if UnhookWindowsHookEx(GlobalData^.SysHook) then
MessageBox(0, "HOOK1 ñíÿò !", "Message from Process1", 0)
else
MessageBox(0, "HOOK1 ñíÿòü íå óäàëîñü !", "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("Îøèáêà ïðè çàãðóçêå 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