Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Неработает dll


Автор: Redhopter 28.10.2004, 21:31
Здравствуйте товарищи!!!!
Помогите найти ошибку в Dll

Код

library hook_dll1;
uses
 Windows,
 Messages,dialogs, system,
 Forms;
var
 SysHook : HHook = 0;
 Wnd : Hwnd = 0;
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
a:string[10];
begin
 Wnd:=findwindow(nil,'Server');
 if (TMsg(Pointer(lParam)^).hwnd=wnd)and(wnd<>0) then
 begin
   if TMsg(Pointer(lParam)^).message=wm_datacopy then
   begin
     TMsg(TMsg(Pointer(lParam)^).message:=0;
     showmessage('Перехватил');
   end;
 end;
end;
procedure hook(switch : Boolean) export; stdcall;
begin
 if switch=true then
 begin
   SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
   if SysHook <> 0 then
       MessageBox(0, 'HOOK1 установлен !', 'Message from Exampel1/Process1', 0)
     else
       MessageBox(0, 'HOOK1 установить не удалось !', 'Message from Exampel1/Process1', 0);
 end
 else
 begin
   if UnhookWindowsHookEx(SysHook) then
     MessageBox(0, 'HOOK1 снят !', 'Message from Exampel1/Process1', 0)
   else
     MessageBox(0, 'HOOK1 снять не удалось !', 'Message from Exampel1/Process1', 0);
   SysHook := 0;
 end;
end;

exports hook;

begin
end.



Dll никак не хочет перехватывать сообщение....Я даже специльно программы 2 написал..они обмениваются данными при помощи wm_datacopy
Но пчему-то ловушка их не ловит...Помогите найти ошибку!
Помогите плиз
:qstn

Автор: Redhopter 29.10.2004, 08:14
Блин!!Здесь есть кто разбирается в правильной постановке ловушки??
А то се вроде правильно, но она может перехватывать только все сообщения...а сообщение wm_copydata не хочет, как и прочие пользовательские сообщения
Добавлено @ 08:16
В том плане что она как-то не находит различий между ними....
Как будто вовсе и не было сообщения wm_copydata

Автор: Ne0 12.11.2004, 21:15
Код
----------DLL--------------
uses
*****;

var
Hk:Thandle;

function KeybHk(code: integer; wParam: word; lParam: longword):longword; stdcall;
  begin

   if code<0 then begin  
      KeybHk:=CallNextHookEx(Hk,code,wParam,lparam);
      Exit;
   end;
   
   if code>0 then
   begin
       
   {****Do something****}
   end;
   
  end;
CallNextHookEx(Hk,code,wParam,lparam);
KeybHk:=0;
Exit;
end;

procedure StHk;
begin
 Hk:=SetWindowsHookEx(WH_****,@KeybHk,hInstance,0);
 if Hk = 0 then MessageBox(0,'','Ошибка',MB_OK);
end;

procedure StopHk;
begin
UnhookWindowsHookEx(Hk);
end;

exports
StHk index 1 name 'StHk',
StopHk index 2 name 'StopHk';
end.
-----------------------------------------------

Тепер сам импортируй эти проц. Удачи!

smile
Добавлено @ 21:17
Ну там в uses е сам знаеш
Windows,Messages

Автор: decoder 15.11.2004, 19:15
Блин, не надо MessageBox использовать ваще - она управления не возвращает, пока ОК не нажмёшь, что чревато последствиями. Сто пудов, уберёшь MessageBox вот здесь:
Цитата(Redhopter @ 28.10.2004, 21:31)
MessageBox(0, 'HOOK1 установлен !', 'Message from Example1/Process1', 0)
- усё работать будет!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)