다음을 통해 공유


콘솔 입력 버퍼

각 콘솔에는 입력 이벤트 레코드 큐가 포함된 입력 버퍼가 있습니다. 콘솔 창에 키보드 포커스가 있는 경우 콘솔은 각 입력 이벤트(예: 단일 키 입력, 마우스 이동 또는 마우스 단추 클릭)의 형식을 콘솔의 입력 버퍼에 배치하는 입력 레코드로 지정합니다.

애플리케이션은 상위 수준 콘솔 I/O 함수를 사용 하거나 하위 수준 콘솔 입력 함수를 사용하여 직접 콘솔의 입력 버퍼에 간접적으로 액세스할 수 있습니다. 상위 수준 입력 함수는 입력 버퍼의 데이터를 필터링하고 처리하여 입력 문자 스트림만 반환합니다. 하위 수준 입력 함수를 사용하면 애플리케이션이 콘솔의 입력 버퍼에서 직접 입력 레코드를 읽거나 입력 레코드를 입력 버퍼에 배치할 수 있습니다. 콘솔의 입력 버퍼에 대한 핸들을 열려면 CreateFile 함수 호출에서 CONIN$ 값을 지정합니다.

입력 레코드는 발생한 이벤트 유형(키보드, 마우스, 창 크기 조정, 포커스 또는 메뉴 이벤트)과 이벤트에 대한 특정 세부 정보가 포함된 구조입니다. INPUT_RECORD 구조체의 EventType 멤버는 레코드에 포함된 이벤트 유형을 나타냅니다.

포커스 및 메뉴 이벤트는 시스템에서 내부적으로 사용하기 위해 콘솔의 입력 버퍼에 배치되며 애플리케이션에서 무시해야 합니다.

키보드 이벤트

키보드 이벤트는 키를 누르거나 놓을 때 생성됩니다. 여기에는 제어 키가 포함됩니다. 그러나 ALT 키는 다른 문자와 결합되지 않고 누르고 놓을 때 시스템에 특별한 의미가 있으며 애플리케이션에 전달되지 않습니다. 또한 입력 핸들이 처리 모드인 경우 Ctrl+C 키 조합이 전달되지 않습니다.

입력 이벤트가 키 입력인 경우 INPUT_RECORD 이벤트 멤버는 다음 정보를 포함하는 KEY_EVENT_RECORD 구조체입니다.

  • 키를 눌렀는지 해제했는지 여부를 나타내는 부울 값입니다.
  • 키를 누를 때 1보다 클 수 있는 반복 횟수입니다.
  • 지정된 키를 디바이스 독립적 방식으로 식별하는 가상 키 코드입니다.
  • 키보드 하드웨어에서 생성된 디바이스 종속 값을 나타내는 가상 검사 코드입니다.
  • 번역된 유니코드™ 또는 ANSI 문자입니다.
  • 컨트롤 키의 상태(Alt, Ctrl, Shift, NUM LOCK, SCROLL LOCK 및 CAPS LOCK 키)를 나타내고 향상된 키를 눌렀는지 여부를 나타내는 플래그 변수입니다. IBM® 101 키 및 102 키 키보드의 향상된 키는 숫자 키패드의 왼쪽에 있는 클러스터의 INS, DEL, HOME, END, PAGE UP, PAGE DOWN 및 화살표 키와 숫자 키패드의 나누기(/) 및 ENTER 키입니다.

마우스 이벤트

마우스 이벤트는 사용자가 마우스를 이동하거나 마우스 단추 중 하나를 누르거나 놓을 때마다 생성됩니다. 마우스 이벤트는 다음 조건이 충족되는 경우에만 입력 버퍼에 배치됩니다.

  • 콘솔 입력 모드는 ENABLE_MOUSE_INPUT(기본 모드)로 설정됩니다.
  • 콘솔 창에 키보드 포커스가 있습니다.
  • 마우스 포인터는 콘솔 창의 테두리 내에 있습니다.

입력 이벤트가 마우스 이벤트인 경우 INPUT_RECORD 이벤트 멤버는 다음 정보를 포함하는 MOUSE_EVENT_RECORD 구조체입니다.

  • 콘솔 화면 버퍼의 좌표계에 있는 문자 셀 행과 열의 측면에서 마우스 포인터의 좌표입니다.
  • 마우스 단추의 상태를 나타내는 플래그 변수입니다.
  • 제어 키의 상태(Alt, Ctrl, Shift, NUM LOCK, SCROLL LOCK 및 CAPS LOCK)를 나타내고 향상된 키를 눌렀는지 여부를 나타내는 플래그 변수입니다. IBM 101 키 및 102 키 키보드의 향상된 키는 숫자 키패드의 왼쪽에 있는 클러스터의 INS, DEL, HOME, END, PAGE UP, PAGE DOWN 및 화살표 키와 숫자 키패드의 나누기(/) 및 ENTER 키입니다.
  • 이벤트가 일반 단추 누름 또는 단추 해제 이벤트인지, 마우스 이동 이벤트인지, 두 번 클릭 이벤트의 두 번째 클릭인지를 나타내는 플래그 변수입니다.

참고 항목

마우스 위치 좌표는 콘솔 창이 아니라 콘솔 화면 버퍼를 기준으로 합니다. 화면 버퍼가 창과 관련하여 스크롤되었을 수 있으므로 창의 왼쪽 위 모서리가 콘솔 화면 버퍼의 (0,0) 좌표일 필요는 없습니다. 창의 좌표계를 기준으로 마우스의 좌표를 확인하려면 마우스 위치 좌표에서 창 원점 좌표를 뺍니다. GetConsoleScreenBufferInfo 함수를 사용하여 창 원본 좌표를 확인합니다.

MOUSE_EVENT_RECORD 구조체의 dwButtonState 멤버에는 각 마우스 단추에 해당하는 비트가 있습니다. 단추가 아래쪽에 있으면 비트가 1이고 단추가 위쪽이면 0입니다. 단추 릴리스 이벤트는 MOUSE_EVENT_RECORD dwEventFlags 멤버에 대해 0 값으로 검색되고 단추의 비트가 1에서 0으로 변경됩니다. GetNumberOfConsoleMouseButtons 함수는 마우스의 단추 수를 검색합니다.

버퍼 크기 조정 이벤트

콘솔 창의 메뉴를 사용하면 사용자가 활성 화면 버퍼의 크기를 변경할 수 있습니다. 이 변경은 버퍼 크기 조정 이벤트를 생성합니다. 콘솔의 입력 모드가 ENABLE_WINDOW_INPUT 설정 되면(즉, 기본 모드가 비활성화 됨) 버퍼 크기 조정 이벤트가 입력 버퍼에 배치됩니다.

입력 이벤트가 버퍼 크기 조정 이벤트인 경우 INPUT_RECORD 이벤트 멤버 문자 셀 열 및 행으로 표현된 콘솔 화면 버퍼의 새 크기를 포함하는 WINDOW_BUFFER_SIZE_RECORD 구조체입니다.

사용자가 콘솔 화면 버퍼의 크기를 줄이면 버퍼의 dis카드ed 부분에 있는 모든 데이터가 손실됩니다.

SetConsoleScreenBufferSize 함수에 대한 애플리케이션 호출의 결과로 콘솔 화면 버퍼 크기에 대한 변경 내용은 버퍼 크기 조정 이벤트로 생성되지 않습니다.