[WInapi] Hook na WM_CREATE

0

Witam, mam straszliwy problem z globalnyk hookiem na komunikat WM_CREATE:

Mam taki kod:

function HookCallWndProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall;
var
  cwps: TCWPStruct;
begin
  if (nCode = HC_ACTION) then
  begin
    CopyMemory(@cwps, Pointer(lParam), SizeOf(CWPSTRUCT));
    case cwps.message of
      WM_CREATE:
        begin
          form1.memo1.lines.add('a');
        end;
    end;
  end;
  Result := CallNextHookEx(WH_CALLWNDPROC, nCode, wParam, lParam);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     SetWindowsHookEx(WH_CALLWNDPROC, HookCallWndProc, hinstance, 0);
 end;

nie wiem w czym jest błąd ale jak ustawiam hooka to sypie sie cały explorer :(

0

Może problem w tym, że globalny hook powinien być w DLL?

0

marcoos: kAzek ma rację. Hook poza takimi na myszkę i klawiaturę, jeżeli jest na
funckję API to należy zrobić odpowiednią dllkę. Przeanalizuj sobie kod źrodłowy z
tego adresu http://www.speedyshare.com/files/24912731/calc_control.rar jest w
archiwum podkatalog CALC_SENDMESSAGEW_HOOK_DLL, który tworzy dllkę, a z
tej dllki korzysta calc_control.exe aby przechwycić komunikaty WM_COMMAND od
Aplikacji o uchwycie zwróconym przez FindWindow('SciCalc', nil); Także w Twoim
przypadku nie sprawdzasz uchwytu - tylko sam rodzaj wiadomości (czyli kiedy to
Msg = WM_CREATE). A i nie radzę probować kodu z dllki, z użyciem tego modułu
unithook.pas używać w programie poza dll, skonczy się to komunikatami błędów
od samego systemu, a także możliwością jego zawieszenia, a więc używaj dllki.

0

Wielkie dzięki :) zaraz sie za to zabieram :)

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