Questa domanda potrebbe avere già una risposta, ma non sono riuscito a trovare la risposta corretta. Sto cercando di attivare o disattivare un interruttore di debug quando viene premuto il tasto F12 in un modulo. Non riesco a utilizzare l'evento onkeydown poiché dovrei configurare una funzione separata per ogni campo insieme al modulo. Quindi ho studiato e ho trovato la funzione SetWindowsHookEx per impostare un hook della tastiera. Questo funziona bene tranne che sto ottenendo due indicazioni il tasto F12 è premuto ogni volta che viene premuto:Gancio tastiera per cercare F12 con 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
vedo la combinazione di tasti è un possibile metodo per verificare la presenza di keydown (WM_KEYDOWN $ 0100). La mia domanda è: come posso testare Keystroke per WM_KEYDOWN?
Qui è la mia funzione di callback:
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;
Quale versione di Delphi stai usando? Perché non utilizzare KeyPreview del modulo? http://stackoverflow.com/questions/6509242/how-does-delphis-keypreview-work – Frazz
Nel peggiore dei casi utilizzare ApplicationEvents. Non c'è bisogno di agganciare la tua applicazione. –
Non sono sicuro del motivo per cui qualcuno farebbe un downvote qui. L'OP ha mostrato prove di ricerca e codice di esempio. Anche l'OP è nuovo (rep = 1), quindi l'incapacità di chiarire la versione di Delphi è scusabile. – Argalatyr