Dziwny problem z Hook

0
var
  Form1: TForm1;
  I : Integer;
  MainMouseHook, MainKeyboardHook : HHOOK;

implementation

{$R *.dfm}

procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if (Msg.Message = WM_MOUSEMOVE) or (Msg.Message = WM_KEYDOWN) then
    UserActive;
  Handled := False;
end;

function KeyboardProc(Code: Integer; wParam: WPARAM;
  lParam: LPARAM): Longint; stdcall;
begin
  Result := 0;
  Form1.UserActive;
  Result := CallNextHookEx(MainKeyboardHook, Code, wParam, lParam);
end;

function MouseProc(Code: Integer; wParam: WPARAM;
  lParam: LPARAM): Longint; stdcall;
begin
  Result := 0;
  Form1.UserActive;
  Result := CallNextHookEx(MainMouseHook, Code, wParam, lParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MainKeyboardHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
  MainMouseHook := SetWindowsHookEx(WH_MOUSE, @MouseProc, HInstance, 0);
  Application.OnMessage := AppMessage;
end;

....

UserActive to procedura ustwiająca opis w Label. Po przesunięciu kursora poz obszar formy znikają wszystkie okna, ikony i pasek zadań. Po chwili część programow uruchamia się ponownie. Co sie dzieje i czemu tak ??

0

U mnie to działa. Jedynie UserActive zamieniłem na: Label1.Caption := 'Bla Bla';

0

Procedura UserActive wygląda tak:

procedure TForm1.UserActive;
var
  Time : _SystemTime;
begin
  GetSystemTime(Time);
  Label1.Caption := Format('Ostatnia aktywnośc : %d : %d : %d : %d', [Time.wHour, Time.wMinute, Time.wSecond, Time.wMilliseconds]);
  Label2.Caption := 'Aktywny';
  I := 0;
  Timer1.Enabled := False;
  Timer1.Enabled := True;
end;

Uruchomiłem program z poza debuggera Delphi i teraz znikają tylko same ikony i wszystkie widoczne okna ale bez okna mojego programu. Po chwili odbudowuje sie pulpit, hook reaguje i znowu wszystko oprocz mojego okna znika [stuk]

0

Chyba już wiem co masz źle. Gdzie umieściłeś deklarację:
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
?
Zapewne w sekcji public lub private. To ma być function of object, więc powinieneś umieśić jeszcze przed sekcjami (czyli tam gdzie jest np. FormCreate).

0

Niestety nic z tego. Zmieniłem deklarację tej procedury, usunąłem ja nawet całkiem (i deklarację i procedurę) i nic sie nie zmieniło ;-( .

[dopisane]

Hehe, dzięki Johny_bit, już coś wykombinowałem :-) . Niestety tak to jest że nowe rozwiązanie rodzi nowy problem. Jeżeli sobie z tym nie poradzę to za chwile na forum przybędzie kolejny temat :-) .

0

Zastosuj wskazówkę ze swojej sygnatury... odepnij kabelek na dwa dni i spox wykombinyjeż.

ps. the word is "breakpoint"

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