To pytanie mogło już zostać udzielone, ale nie udało mi się znaleźć właściwej odpowiedzi. Próbuję włączyć przełącznik przełącznika debugowania po naciśnięciu klawisza F12 w formularzu. Nie mogę użyć zdarzenia onkeydown, ponieważ musiałbym skonfigurować osobną funkcję dla każdego pola wraz z formularzem. Więc zbadałem i znalazłem funkcję SetWindowsHookEx, aby ustawić hak klawiatury. To działa dobrze z wyjątkiem Dostaję dwa wskazania klawisz F12 jest wciskany przy każdym naciśnięciu:Hak na klawiaturę do wyszukiwania F12 z delphi
2014/05/21 14:16:43.334
Code: 0
Key: 123
KeyStroke: 5767169
KeyStroke to Hex: 00580001
2014/05/21 14:16:43.446
Code: 0
Key: 123
KeyStroke: -1067974655
KeyStroke to Hex: C0580001 Note: this should be the keystroke that reflects KEYDOWN
widzę klawiszy jest możliwe metody, aby sprawdzić keydown (WM_KEYDOWN $ 0100). Moje pytanie brzmi: jak przetestować naciśnięcie klawisza dla WM_KEYDOWN?
Oto moja funkcja zwrotna:
function KeyboardHookProc(Code: Integer; Key: Word; KeyStroke: LongInt) : LongInt;
begin
Result := 0;
if Code = HC_NOREMOVE then exit;
Result := CallNextHookEx(FkbHook, Code,Key,KeyStroke);
if Code < 0 then exit;
{
WM_KEYDOWN
}
if (KeyStroke and WM_KEYDOWN) = 0 then { this is where I need to test but this doesn't work! }
begin
if Code = HC_ACTION then
begin
case Key of
vk_F12: begin
TKPMF.Memo1.Lines.Add(FormatDatetime('yyyy/mm/dd hh:nn:ss.zzz',now));
TKPMF.Memo1.Lines.Add('Code: ' + IntToStr(Code));
TKPMF.Memo1.Lines.Add('Key: ' + IntToStr(Key));
TKPMF.Memo1.Lines.Add('KeyStroke: ' + IntToStr(KeyStroke));
TKPMF.Memo1.Lines.Add('KeyStroke to Hex: ' + LongToHex(KeyStroke));
end;
end; {case}
end;
end;
end;
Jaką wersję Delphi używasz? Dlaczego nie skorzystać z KeyPreview formularza? http://stackoverflow.com/questions/6509242/how-does-delphis-keypreview-work – Frazz
W najgorszym przypadku użyj ApplicationEvents. Nie ma potrzeby przechwytywania własnej aplikacji. –
Nie wiem, dlaczego ktokolwiek miałby tutaj zejść. PO wykazał dowody badań i przykładowy kod. OP jest również nowy (rep = 1), więc nie można wyjaśnić braku wyjaśnienia wersji Delphi. – Argalatyr