Я наверно уже надоел, надеюсь задаю последний вопрос как правильно передать указатель в параметрах запущенной ловушки в 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 выдает ошибку... Прошу поправьте мой код.