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 ?
A przypadkiem nie wywołuje się raz na naciśnięcie, a raz na puszczenie klawisza?
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?
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
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ę.
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