problem z globalnym hookiem

0

mam problem z tą funkcją:

function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; KStrokeInfo: lParam): LResult; stdcall;
var
Struct: PKbdDllHookStruct; //Wskaźnik do struktury, w której otrzymamy informacje o stanie klawiatury

begin

Struct := Ptr">Ptr(KStrokeInfo);
Result := 0;
if (HookCode >= 0) then
begin

if (Struct.vkCode = 77)  then
begin

  if (form1.Timer1.Enabled = true) then
  begin
  form1.Timer1.Enabled := false;
  end;
  if (form1.Timer1.Enabled = false) then
  begin
  form1.Timer1.Enabled := true;
  end;
  result := 1;
end;

end;
//Jeżeli kombinacji nie chcemy blokować, to przeka żmy informacje dla innych okien
if (Result = 0) then
begin
Result := CallNextHookEx(HookID, HookCode, KeyCode, KStrokeInfo);
end;
end;

ponieważ zawsze kiedy naciskam 'm' ta funkcja wykonuje się 2 razy przez co nie moge zmienić parametru timera. Wie ktoś jak temu zaradzic?

0

A czy przypadkiem to nie jest tak że raz na wciśnięcie a raz na puszczenie klawisza to działa? - sprawdź choćby i przytrzymując dłużej klawisz a w tym czasie ta metodka coś zmieni na formie.

0

niestety tak nie jest

0

Ten kod jest rozbrajający

    if (form1.Timer1.Enabled = true) then
      begin
      form1.Timer1.Enabled := false;
      end;
      if (form1.Timer1.Enabled = false) then
      begin
      form1.Timer1.Enabled := true;
      end;

Zamień to na:

Timer1.Enabled := not Timer1.Enabled;
0

dzięki ale to nie rozwiązało mojego problemu. Da się tą funkcję zrobić tak, żeby działała tylko wtedy gdy naciśniemy przycisk?

0

załóż zwykłego globalnego hooka na wszystkie komunikaty przez WinAPI i sprawdzaj czy komunikat to WM_KEYDOWN

function KeyboardHook(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_KEYDOWN then { dotyczy tylko komunikatu WM_KEYDOWN }
   begin
      //costam
     end;
0

Hehehe, nikt z was nie pofatygował się żeby spytać się Microsoftu jak to z tym jest? =]
http://msdn.microsoft.com/en-us/library/ms644967.aspx
I pisze jak sprawdzić czy przycisk jest wciśnięty w tej strukturce której używasz w pierwszym kodzie =]

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