podwojny hook - blad

0

Witam, szukalem na forum podobnego bledu, ale nic na ten temat nie znalazlem.
Mianowicie zalozylem sobie hooka w nowym programie, jednak nie dziala on prawidlowo, gdyz kodzik podpiety pod reakcje klawisza wykonuje sie dwa razy. Kombinowalem i doszedlem do wniosku ze prawdopodobnie przyczyna jest hook zalozony w moim drugim programie, ktory chodzi u mnie non stop, czy jest to mozliwe ? W sumie wylaczylem stary program, zrestartowalem komputer i nowy nadal wykonywal dwa razy reakcje podpieta pod klawisz, nie wiem o co chodzi :/ sprawdzalem kilkakrotnie czy przypadkiem czegos zle nie zrobilem, ale wszystko wyglada ok :/ czy wiecie moze dlaczego reakcja na klawisz wykonuje mi sie dwa razy ?

0

A przypadkiem nie wywołuje się raz na naciśnięcie, a raz na puszczenie klawisza?

0

W 5 wierszu brak średnika [!!!] Może wkleisz kawałek kodu nikt tu nie jest jasnowidzem. Nawet nie napisałeś jakiego hooka zakładasz. Czy chodzi o WH_KEYBOARD?

0
function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; KStrokeInfo: lParam): LResult; stdcall;
var
  Struct: PKbdDllHookStruct; 
begin
  Struct := Ptr(KStrokeInfo);
  Result := 0;
  if (HookCode >= 0) then
    if (Struct.vkCode = VK_PAUSE) then
     begin
      showmessage('dziala');
      result := 1;
     end;
  if (Result = 0) then
    Result := CallNextHookEx(HookID, HookCode, KeyCode, KStrokeInfo);
end;

Po nacisnieciu klawisza PAUSE wyskakuja mi dwa okienka showmessage

0

Jeżeli chodzi o VK_PAUSE to spróbuj tego:
Ten warunek jest spełniony przy naciśnięciu klawisza

if (Struct.vkCode = VK_PAUSE) and ((GetKeyState(VK_PAUSE) and $F0000000)  =  0 )  then

A ten przy zwolnieniu

if (Struct.vkCode = VK_PAUSE) and ((GetKeyState(VK_PAUSE) and $F0000000)  =  $F0000000)  then

UWAGA: Nie działa przy innych klawiszach. Napisz jeżeli chodzi o inne klawisze to może coś wykombinuję.

0
kAzek napisał(a)

Jeżeli chodzi o VK_PAUSE to spróbuj tego:
Ten warunek jest spełniony przy naciśnięciu klawisza

if (Struct.vkCode = VK_PAUSE) and ((GetKeyState(VK_PAUSE) and $F0000000)  =  0 )  then

A ten przy zwolnieniu

if (Struct.vkCode = VK_PAUSE) and ((GetKeyState(VK_PAUSE) and $F0000000)  =  $F0000000)  then

UWAGA: Nie działa przy innych klawiszach. Napisz jeżeli chodzi o inne klawisze to może coś wykombinuję.

W pierwszym i drugim przypadku:

Operator not applicable to this operand type

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