티스토리 뷰

728x90

태블릿이나 키오스크처럼 키보드가 없는 환경에서 키보드 입력을 받고 싶을 경우, 특정 프로그램 테스트를 위해서 가상의 키입력을 만들 경우에는 윈도우 폼의 SendKeys 클래스의 Send 메소드를 활용하여 임의의 키입력을 만들 수 있습니다. 버튼으로 만든 가상키보드를 누르거나 미리 준비 된 문자열을 키보드로 입력한것 처럼 동작시킬때 유용한 기능입니다.

SendKeys.Send() 메소드로 키 입력 신호를 보내면 현재 키보드 포커스를 소유한 곳에서 해당 신호를 받을 수 있습니다. 현재 가동중인 응용 일수도 있고 키보드 포커스가 다른 프로그램에 있다면 현재 응용 프로그램이 아닌 다른 프로그램에 임의의 키 입력을 전달할 수도 있는 것입니다. 현재 프로그램에서 다른 특정 응용에 포커스를 넘기는 닷넷 기능은 아직 없기 때문에 다른 임의의 프로그램을 지정해서 키보드 입력을 전달하려면 FindWindowEx와 SetForegroundWindow를 적절히 활용하는 방법은 있습니다.

현재 응용에서 키 입력을 보내는 방법은 어느 정도 제어를 할 수 있으므로 SendKeys.Send("GOOD")처럼 문자열을 보내면 자동으로 키입력 처리를 해줍니다. 아래의 그림은 폼에 여러개의 텍스트 입력창을 둔 상태에서 버튼을 클릭하면 미리 준비된 키입력을 보내는 예제와 코드입니다.


Public Class Form2
    Private lastbox As TextBox
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click, Button5.Click, Button4.Click
        Dim tmp As Button = sender
        SendKeys.Send(tmp.Text)
    End Sub

    Private Sub Button3_GotFocus(sender As Object, e As System.EventArgs) Handles Button3.GotFocus, Button5.GotFocus, Button4.GotFocus
        lastbox.Focus()
    End Sub

    Private Sub TextBox1_LostFocus(sender As Object, e As System.EventArgs) Handles TextBox1.LostFocus, TextBox2.LostFocus, TextBox3.LostFocus
        lastbox = sender
    End Sub
End Class

각 텍스트박스에서 키보드 포커스를 잃을때 해당 오브젝트를 저장해 놓습니다. 버튼을 누르면 포커스가 자동으로 해당 버튼으로 이동되기 때문에 텍스트 박스에서는 LostFocus 이벤트가 발생하고 키보드 포커스를 받는 버튼은 GotFocus 이벤트를 받습니다. 버튼에서 포커스를 받으면 마지막으로 포커스를 가지고 있었던 텍스트박스로 포커스를 돌려줍니다. 그리고 버튼의 클릭 이벤트에서 SendKeys.Send()로 키입력을 전송하면 현재 키보드 포커스가 있는 컨트롤로 키가 입력된 것처럼 처리되는 것입니다.

SendKeys.Send()로 보낼 수 있는 키입력은 일반적인 문자열 뿐만아니라 기능키와 보조키 조합도 보낼 수 있습니다. 키입력 스트링에서 +, ^, %, ~, (, ) 문자들은 직접입력할 수 없는 특별한 의미를 가지므로 이 문자들을 키입력으로 보내고싶으면 {+}와 같이 중괄호{}로 묶어주면 됩니다. 대괄호 []는 특별한 의미가 없지만 중괄호 {}로 묶어주고 중괄호 자체도 {{}처럼 묶어서 표기해야 합니다. 

+는 Shift키를 의미해서 "+a"는 시프트를 누른 a키 입력을 의미합니다. ^는 Ctrl키, %는 Alt키를 의미하며 키입력 바로 앞에 기술해주면 됩니다. ~는 엔터키를 의미합니다. 아래는 중괄호 {}로 묶어 전달할 수 있는 특수키의 목록입니다.

  • {ADD} : 키패드 + 

  • {BACKSPACE}, {BS}, {BKSP} : 백스패이스

  • {BREAK} : BREAK

  • {CAPSLOCK} : CAPS LOCK

  • {DELETE}, {DEL} : DELETE

  • {DIVIDE} : 키패드 /

  • {DOWN} : 아래로 방향키

  • {END} : END

  • {ENTER} : 엔터키

  • {ESC} : ESC

  • {F1} ~ {F16} : F1 ~ F16

  • {HOME} : HOME

  • {INSERT}, {INS} :  INSERT

  • {LEFT} : 좌 방향키

  • {MULTIPLY} : 키패드 *

  • {NUMLOCK} : NUM LOCK

  • {PGDN} : PAGE DOWN

  • {PGUP} : PAGE UP

  • {RIGHT} : 우 방향키

  • {SCROLLLOCK} : SCROLL LOCK

  • {SUBTRACT} : 키패드 -

  • {TAB} : TAB

  • {UP} : 위로 방향키


728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함