Globalny hook...

0

jak zalozyc globalnego hooka na komunikat WM_MOVING ?
bo z klawiatura i np. myszka nie mam problemu...

dzieki.
cimak.

0

Jeżeli ma to być hook na konkretne okno to możesz spróbować WH_CALLWNDPROC lub WH_CALLWNDPROCRET w zależności od tego czy chcesz obsługiwać wiadomość przed czy po tym jak okno ją odbierze. Jeżeli jednak chcesz nasłuchiwać na wszystkie możliwe WM_MOVING to możesz użyć WH_GETMESSAGE lub WH_JOURNALRECORD (tylko, gdy nie modyfikujesz wiadomości).

0

no wlasnie... rzecz w tym, ze probowalem WH_GETMESSAGE ale nie dziala... wlasciwie to nic nie dziala a ja musze modywwikowac komunikat i to dla wsyzstkich okien w systemie...

moze w kodzie cos dalem nie tak...?

library MessageHook;

uses Messages, Windows;
var
  HookHandle: HHook;
  MessageBuffer:TEventMsg;


function MSGProc(Code: integer; wParam, lParam: Longint): Longint; stdcall;
begin
  case Code of

  HC_ACTION: begin
   MessageBuffer:=PEventMsg(lParam)^;
   if MessageBuffer.message=WM_MOVING then
        begin
        Windows.Beep(4000,10);//Nic nie odbiera... 
        Result:=0;
        end;
end;

  else begin
   Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
  end;
end;
end;




function InstallHook: boolean;
begin                       
  HookHandle:=SetWindowsHookEx(WH_GETMESSAGE, @MSGProc, HInstance, 0);  
  Result:=HookHandle<>0;
end;

function UninstallHook: boolean;
begin
  Result:=UnhookWindowsHookEx(HookHandle);
end;


exports
  InstallHook,
  UninstallHook;

begin
end.
0
msdn napisał(a)

lParam
[in] Pointer to an MSG structure that contains details about the message.

Więc nie TEventMSG.

co do HC_ACTION to chyba jak jest HC_ACTION to musisz przetworzyc, jesli ponizej zera przekazac dalej. Pozostałe wartosci mozesz przetworzyc lub nie. więc nie ograniczaj się tylko do HC_ACTION.

Więcej tutaj

0

qrde.... probowalem juz chyba wszystkiego i caly czas jakos nie moge tego zrobic... jestem w stanie odebrac kazdy inny komunikat, po prostu kazdy, ale WM_MOVING nie... [sciana]

function MSGProc(Code: integer; wParam, lParam: Longint): Longint; stdcall;
var Msg:TMsg;
begin
If Code<0 then
        begin
        Result:=CallNextHookEx(HookHandle,Code,wParam,lParam);
        Exit;
        end;


        Msg:=PMSG(lParam)^;
        If Msg.message=WM_MOVING then
                Windows.Beep(4000,10);
Result:=CallNextHookEx(HookHandle,Code,wParam,lParam);
end;

{....}

HookHandle:=SetWindowsHookEx(WH_GETMESSAGE , @MSGProc, HInstance, 0);

nic... za to jak zamiast WM_MOVING dam WM_KEYDOWN albo cokolwiek innego to poprawnie rozpoznaje komunikaty...

help.
</delphi>

0

ech... ZROBILEM :)

function MSGProc(nCode, wParam: Integer; lParam: PCWPSTRUCT): Integer; stdcall;
var R:PRect;
begin

if Assigned(lParam) and (lParam^.message = WM_MOVING) then
     begin
     Windows.Beep(4000,1); //Tylko przyklad...
     end;

Result:=CallNextHookEx(HookHandle, nCode, wParam, Integer(lParam));
end;

[...]

HookHandle:=SetWindowsHookEx(WH_CALLWNDPROC  , @MSGProc, HInstance, 0);

czyli wszystko zalezalo od tego nieszczesnego PCWPSTRUCT...

0

Różne - może się przyda: http://www.bitlogic.co.uk/downloads/hookpack.zip

1 użytkowników online, w tym zalogowanych: 0, gości: 1