이 질문은 답변되었지만 적절한 답변을 찾을 수 없었습니다. 폼에서 F12 키를 누르면 디버그 스위치를 토글하려고합니다. 양식과 함께 각 필드에 대해 별도의 기능을 설정해야하므로 onkeydown 이벤트를 사용할 수 없습니다. 그래서 연구 하 고 키보드 후크를 설정하는 SetWindowsHookEx 함수를 발견했습니다. 나는이 개 표시 F12 키가있다 눌러 누를 때마다 얻고 제외하고이 잘 작동 :델파이로 F12를 찾는 키보드 후크
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
을 나는 키 입력이를 keyDown (WM_KEYDOWN $ 0100)를 확인하기 위해 가능한 방법을 참조하십시오. 내 질문에 WM_KEYDOWN에 대한 키 입력을 테스트하려면 어떻게해야합니까? 당신은 각 개별 컨트롤의 OnKeyDown
이벤트에 다른 처리기를 할당 할 필요가 없습니다
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;
어떤 델파이 버전을 사용하고 있습니까? 양식의 KeyPreview를 사용하지 않는 이유는 무엇입니까? http://stackoverflow.com/questions/6509242/how-does-delphis-keypreview-work – Frazz
최악의 경우 ApplicationEvents를 사용하십시오. 자신의 응용 프로그램을 연결할 필요가 없습니다. –
왜 누군가가 여기에 downvote 모르겠어요. OP는 연구의 증거와 예제 코드를 보여주었습니다. OP도 새롭기 때문에 (rep = 1), Delphi 버전을 명확히하지 못하는 것은 용납 될 수 없습니다. – Argalatyr