Problemy z hook-iem na mysz - zawieszenie się programów

0

Witam!
Ostatnio robiłem hook-a na mysz według schematu na stronie http://4programmers.net/Delphi/faq/Jak_za%C5%82o%C5%BCy%C4%87_globalny_hook_na_mysz

Po pierwszej kompilacji program działa poprawnie - reakcja na lpm, ppm, a także na ruch myszy jest. Gdy skompiluję po raz kolejny wszystko mi się wiesza. Dopiero ctrl+alt+del odblokowują mi wszystko ale hook nie działa.
Wcześniej robiłem hook-i na klawiaturę które działały mi bezbłędnie i zauważyłem że hoook-i na mysz i klawiaturę są bardzo podobne więc postanowiłem zrobić hook-a na mysz podobnie jak ten klawiaturowy, lecz w najlepszym przypadku efekt po prostu się powtórzył (1-sza kompilacja - wszystko działa, kolejna nie).
Z góry dziękuję za pomoc.

0

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Hook:Integer;
MessageBuffer:TEventMsg;

implementation

{$R *.dfm}

function Play(Code: Integer; wParam, lParam: Longint): Longint; stdcall;
begin
Case Code of
HC_ACTION:
begin
MessageBuffer := PEventMsg(lParam)^;

    if MessageBuffer.Message = WM_LBUTTONDOWN then
      begin
        Form1.Label1.Font.Color:=clred;
        Result := 0;
      end;

    if MessageBuffer.message = WM_RBUTTONDOWN then
      begin
        Form1.Label1.Font.Color:=clgreen;
        Result := 0;
      end;
  end;
else
  begin
   Result := CallNextHookEx(Hook, Code, wParam, lParam);
 end;

end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Hook := SetWindowsHookEx(WH_journalrecord, Play, hInstance, 0);
end;

end.

0

Prosty człowiek to i na MSDN nie potrafi przeczytać:

MSDN napisał(a)

Removal is important. It prevents a journaling application from locking up the system by hanging inside a hook procedure.

Co do Alt+Ctrl+Delete:

MSDN napisał(a)

This role as a signal to stop journal recording means that a CTRL+BREAK key combination cannot itself be recorded. Since the CTRL+C key combination has no such role as a journaling signal, it can be recorded. There are two other key combinations that cannot be recorded: CTRL+ESC and CTRL+ALT+DEL. Those two key combinations cause the system to stop all journaling activities (record or playback), remove all journaling hooks, and post a WM_CANCELJOURNAL message to the journaling application.

A wystarczyło nazwę hooka wklepać w googla - za trudne. Gdzie ja się dziwie jak koleś który na forum jest już od długiego czasu wciąż nie umie zrozumieć że kod się wkleja w tagi.

0

Trochę pozmieniałem i mam teraz na buttonach blokowanie i odblokowywanie - teraz jest już ok

0
Elhatron napisał(a):

Trochę pozmieniałem i mam teraz na buttonach blokowanie i odblokowywanie - teraz jest już ok

No i dlatego nie oznaczysz żadnej odpowiedzi jako rozwiązanie - przecież nie umiesz zupełnie tak samo jak wpisać temat w googla.

odblokowywanie też dawałem - bez skutku

Najpierw mówi, potem myśli. Typowe.

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