Globalny HOOK

0

Witam! Ostatnio pewien problem poruszył mnie baaaaardzo... Chodzi o bezpieczeństwo...

Chciałem założyć globalnego hooka któryby filtrował komunikaty i np. jeśli ktoś lub coś chce mi zamknąć system to chciałbym zablokować taki message, żeby mieć pełną kontrolę. Albo jak idzie jakiś komunikat, który mi się nie podoba, to... :[ i nie ma go...

[sciana] Nie wiem dokładnie jak to zrobić, bo dopiero od wczoraj uczę się o hookach, natomiast jest mi to bardzo potrzebne. Prosze... Nie... BLAGAM o pomoc :)</b>

Ja wiem, że już coś o globalnym hooku dla klawiatury było, ale nie znalazłem tam nic o zablokowaniu komunikatu.

0

musisz wiedziec ktore funkcje winapi chcesz przechwycic, no i potem robisz dll w ktora masz hooka na wybrane api, taka dll musisz wstrzyknac w kazdy proces zeby dzialalo globalnie, bardzo latwo hooknac wybrana api za pomoca komponentu z madshi.net jest to dobre jezeli zaczynasz zabawe z hookiem jak jjuz poznasz temat to zainteresuj sie czyms takim jak uallcollection

0

a tak na przyszłość

  1. nie pisz boldem
  2. edytuj swoje posty - nie pisze jednego pod drugim
0

Tak, wiem, już poprawiłem tą grubą i czarną jak smoła czcionke na piękną, małą - kruczoczarną

No tak. Ale ja nie chcę mieć DLL-a, nawet tego z madshi.net. Chcę mieć wszystko w jednym programie, zauważyłem, że gdy moja aplikacja minimalizuje się do Traya to nadal przechwytuje komunikaty na klawiature, więc może DLL nie jest wcale mi potrzebny kiedy program jest uruchomiony (albo w XP tak jest przynajmniej). W każdym razie przechwytuje komunikat WM_JAKISTAM i co ?

chwilka...


unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TMain = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  end;

var
  Main: TMain;

implementation

{$R *.dfm}

var
  MainHook : HHOOK; // wskazanie na hooka

function MojHook(Code: Integer; wParam : WPARAM;
  lParam : LPARAM): Longint; stdcall;
var
  Buffer : TEventMsg; // deklaracja struktury
 
begin
  Result := 0; // wartość zwracana przez procedurę
  Buffer := PEventMsg(lParam)^; // uzyskanie danych poprzez odczytanie wskaźnika

  if Buffer.Message = WM_QUERYENDSESSION  
 {powiedzmy wyłączanie systemu} 
  then
  begin
  //zablokuj tten przeklęty message! jak to zrobić?
  end;
end;

procedure TMain.FormCreate(Sender: TObject);
begin
{ załóż hooka }
  MainHook := SetWindowsHookEx(WH_JOURNALRECORD, MojHook, hInstance, 0);
  if (MainHook = NULL) then
   raise Exception.Create('Nie ma bata! Hooka nie bedzie!');
end;

procedure TMain.FormDestroy(Sender: TObject);
begin
  UnhookWindowsHookEx(MainHook);
end;

end.
end.

no i jak to zrobić, żeby zablokować ten komunikat?
od razu zaznaczam, że

result:=1;

nic mi nie dało i komunikat hula sobie dalej...

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