Показать сообщение отдельно
  #34  
Старый 07.11.2012, 20:49
helgboy helgboy вне форума
Прохожий
 
Регистрация: 30.10.2012
Сообщения: 33
Репутация: 10
По умолчанию

Я наверно уже надоел, надеюсь задаю последний вопрос как правильно передать указатель в параметрах запущенной ловушки в dll вот код:
Код:
procedure RunStopHook(State : Boolean;nx:pointer) export; stdcall;
  begin
    if State=true then
    begin
      SysHook := SetWindowsHookEx(WH_GETMESSAGE,
            @SysMsgProc, HInstance, 0);
// здесь nx содержит правильный адрес функции используемой в exe
    end
    else// 
    begin
      UnhookWindowsHookEx(SysHook);
      SysHook := 0;
    end;
  end;
  exports RunStopHook;

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_KEYDOWN then  
    case (TMsg(Pointer(lParam)^).wParam) of
    37:   begin
            if left1=0 then left1:=GetTickCount(); 
            if (GetTickCount()-left1)>=time then begin  left(); end
          end;
  
    end;

 
 end;
end;



procedure left();
begin
showmessage('  Nx='+inttostr(Integer(nx^)));
end;



Здесь при запуски ловушки клавиатуры при нажатии клавишы "37" дожны вызваться процедура left(); и внутри выдать сообщение (например) с адресом функции.
Я пытался в SysMsgProc вставить в качестве четвертого аргумента nx: pointer выдает ошибку... Прошу поправьте мой код.
Ответить с цитированием