가상키보드 (화면키보드)를 만들어보자

Posted by NUL PROG. : 2007. 4. 29. 18:47

가상 키보드(화면 키보드)란??


 화면에 키보드 형상을 그리고 그걸 클릭해서 실제 키보드를 타이핑하는것과 똑같은 효과를 얻기 위한 프로그램. 키보드가 없는 터치패널 시스템과 같이 키보드를 쓰기 어려운 상황에서 사용된다.

기술적 어려움

  1. 마우스 입력 후킹해서 키보드 입력메시지를 보내야 함.
  2. 키보드의 키 입력 상태(IME의 상태 CAPS_LOCK, NUM_LOCK 등등) 감시하고 있어야 함.
  3. 가상키보드의 자판을 클릭 시에도 원래의 애플리케이션에 포커스가 머물러 있어야 함
  • WH_MOUSE로 후킹을 하게 되면 마우스 입력을 취소시키더라도 포커스가 변경이 되어버리는 문제가 있다. 즉 후킹 전에 이미 포커스 이동 명령이 나가 버린다는 점. 따라서, 이를 방지하고자 메시지 후킹을 해야 할까 생각했지만, 다행히도 윈도우 2000 버전 이후에 추가된 WH_MOUSE_LL이라는 녀석이 있다.
  • 이 녀석은 마우스 입력이 들어가자마자 가로채 버린다. 근원적으로 마우스의 입력을 막을 수 있다는 뜻이다. 또한, 애초에 포커스가 이동하지 않기 때문에 한글 조합도 신경을 쓸 필요가 없다. 물론 윈도 2000 버전부터 지원한다는 것이 꺼림칙하긴 하지만, 늘보가 만드는 프로그램은 언제나 윈도 2000 이상을 요구하므로, 별 상관이 없다 -_-;
  • 사실 델파이 7에는 WH_MOUSE_LL 가 정의되어 있지 않기 때문에 전혀 모르고 있었는데, 도움말 파일을 뒤적거리다가 우연히 발견했다. 문제는 WH_MOUSE_LL 이게 값이 얼마 인지 알 수가 없어서 WH_MOUSE_LL = 14 라는 걸 찾으려고 구글을 이용할 수밖에 없었다.
  • 기타 IME 및 키보드의 상태 감시는 소스가 첨부되어 있고 검색하기도 쉽기 때문에 넘어가야겠다. (사실은 얼른 집에 가야 함 -_-;)
  • 포커스된 윈도우에 메시지를 보내는 방식을 쓰지 않고 keybd_event 를 사용했다. 이게 코딩하기 쉽기 때문이다 (귀찮은 걸 싫어하는 늘보임 -_-;)

예제 프로그램과 소스

  1. 원본 프로그램은 키보드의 모든 기능을 집어넣었지만, 여기선 일부만 빌려서 넷핵 플레이용 키보드를 만들었다. NUM 키 누르기가 영 불편하기에 만든 것이다.
  2. 그런데, 만들고 나서는 별로 쓰지는 않고 있다...;
  3. 혹시라도 이걸 사용할 곳이 있다면 출처를 밝히고 마음껏 쓰시라.
  4. 원본 프로그램에 개인적인 잡다한 라이브러리가 많아서 그걸 삭제하고 다시 컴파일하여 올린다.

예제 실행 프로그램 + 소스