반응형
코드를 디버깅할 때 콘솔(console)창을 자주 애용합니다.
한 때, 무의식적으로 콘솔창에 클릭하거나 드래그한 것도 모르는 채로 중간에 멈추는 현상을 경험한 적이 있습니다.
실수를 모르고 간헐적으로 장애를 발생하는구나 하면서 버그를 찾을려는 헛수고를 한 적이 있었습니다.
이를 방지하고자 콘솔창 마우스 드래그, 키보드 입력을 비활성화를 할 수 있는 코드를 알려드립니다.
# 개발 환경
운영체제 : Windows 10 Pro 64bit
개발도구 : Visual Studio 2013 Professional
# 사용한 API
#include <consoleapi.h>
HANDLE WINAPI GetStdHandle(
DWORD nStdHandle
);
BOOL WINAPI GetConsoleMode(
_In_ HANDLE hConsoleHandle,
_Out_ LPDWORD lpMode
);
BOOL WINAPI SetConsoleMode(
_In_ HANDLE hConsoleHandle,
_In_ DWORD dwMode
);
# 문제점
(왼쪽) 마우스 클릭한 경우
(오른쪽) 마우스 드래그한 경우
# 전체 예제 소스
- main함수에서 Console Handle을 받아 Console 설정
#include <stdio.h>
#include <consoleapi.h>
int main(void)
{
DWORD consoleModePrev;
HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(handle, &consoleModePrev);
SetConsoleMode(handle, consoleModePrev & ~ENABLE_QUICK_EDIT_MODE);
int count = 0;
while(1){
printf("counting : %d\n", count++);
Sleep(1000);
}
return 1;
}
# 단위 분석
- int main
DWORD consoleModePrev;
HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(handle, &consoleModePrev);
SetConsoleMode(handle, consoleModePrev & ~ENABLE_QUICK_EDIT_MODE);
- GetStdHandle : 콘솔 입력 버퍼(STD_INPUT_HANDLE) 에서 읽거나 쓸 수 있는 핸들 반환
- GetConsoleMode : 핸들로 통해서 설정된 콘솔 모드를 consoleModePrev 에 저장
- SetConsoleMode : 콘솔 화면 버퍼(handle)의 출력 모드를 마우스/키보드 미입력모드(~ENABLE_QUICK_EDIT_MODE)로 이전 모드(consoleModePrev)와 AND 연산으로 설정
감사합니다.
잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다.
반응형
'Apps. > C & C++' 카테고리의 다른 글
[C++] IP주소 네트워크 연결 확인 Ping 예제소스 (_popen) (1) | 2023.10.06 |
---|---|
[C++/Win32] 프로그램 중복 실행 확인하기(FindWindow) (0) | 2022.03.09 |
[C++/Win32] 변수 값을 파일에 읽고 쓰기 (.ini파일) (0) | 2022.03.06 |