jak zalozyc globalnego hooka na komunikat WM_MOVING ?
bo z klawiatura i np. myszka nie mam problemu...
dzieki.
cimak.
jak zalozyc globalnego hooka na komunikat WM_MOVING ?
bo z klawiatura i np. myszka nie mam problemu...
dzieki.
cimak.
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).
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.
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.
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>
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...
Różne - może się przyda: http://www.bitlogic.co.uk/downloads/hookpack.zip