티스토리 뷰

Visual Studio 2012사용


백그라운드에서 키보드 입력을 읽어보자.


1. 우선 Windows Form 응용프로그램으로 프로젝트 생성하자.

- label 컨트롤 하나 생성한다.


2. 아래의 참조를 추가한다(어셈블리-프레임워크)

- PresentationCore

- WindowsBase


3. 소스는 아래와 같이 작성


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Input;
using System.Threading;

namespace BGwork
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
    bool isRunning = true;
    private void Form1_Load(object sender, EventArgs e)
    {
      Thread TH = new Thread(Keyboardd);
      TH.SetApartmentState(ApartmentState.STA);
      CheckForIllegalCrossThreadCalls = false;
      TH.Start();
    }

    void Keyboardd()
    {
      while (isRunning)
      {
        Thread.Sleep(40); //minimum CPU usage
        if ((Keyboard.GetKeyStates(Key.Return) & KeyStates.Down) > 0)
        {
          label1.Text = "Pressed";
        }
        else
        {
          label1.Text = "Not Pressed";
        }
      }
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
      isRunning = false;
    }
  }
}


- 스레드에서 알아서 계속 키보드값을 읽어준다

- 엔터키 입력 감지시 폼 내 label1의 텍스트가 Pressed로 변경되고, 그 외에는 Not Pressed로 유지된다.


- 끝



댓글