2014-12-01 2 views
3

내 프로그램은 백그라운드에서 실행되며 타이머를 사용하여 Capslock이 켜져 있는지 또는 꺼져 있는지 정기적으로 확인합니다.Delphi에서 CapsLock 키의 상태를 모니터링합니다.

제 질문은 타이머를 사용하는 것보다 나은 해결책이 있습니까?

procedure TForm1.Timer2Timer(Sender: TObject); 
var KeyState: TKeyboardState; 
begin 
    GetKeyboardState(KeyState) ; 
if (KeyState[VK_CAPITAL] = 0) then 
    CheckBox1.Checked:=False //Capslock is OFF 
else 
    CheckBox1.Checked:=True; //Capslock is ON 
end; 

답변

6

낮은 수준의 키보드 고리 (WH_KEYBOARD_LL)로 수행하십시오. SetWindowHookEx으로 후크를 설치하십시오. hook proc의 모든 키보드 이벤트에 대한 알림을 받게됩니다. GetKeyboardState을 호출하여 원래 상태를 감지합니다.

설명서를 자세히 읽어야합니다. GetKeyboardState의 경우는 말한다 : 예를 들어 키가 전환 될 때 다음 하위 비트는 1, Caps Lock 키와 키가 untoggled 경우 0의 키, 토글 키입니다

합니다.

따라서 전체 바이트를 0으로 테스트하는 것은 오류입니다. 저수준 비트 만 테스트하십시오. 해당 비트를 찾으려면 and $1을 사용하십시오.

관련 문제