티스토리 뷰
콘솔 프로그램을 실행하고 실행했던 콘솔 프로그램 윈도우에 대한 핸들을 구할 때가 종종 있다.
핸들을 구할 수 있는 방법은 무수히 많다. 너무 많아서 다 나열하기 힘들다.
자주쓰이거나 편하게 쓸 수 있는 방법 중 몇가지를 나열해보았다.
아래 리스트 중에 GetConsoleWindow() API 함수 호출이 가장 바람직한 방법이라 할 수 있다.
1. GetActiveWindow()
2. GetConsoleWindow()
3. GetCurrentProcess()
4. GetForegroundWindow()
2번이 바람직한 이유는 위 3가지 방법을 각각 테스트해보면 1번,3번은 구한 핸들이 NULL로 표시되고
2번과 4번 방법을 통해 제대로 된 핸들 값을 구할 수 있다.
4번 방법은 방금 시작한 프로그램에 대해서는 핸들을 정상적으로 구할 수 있지만
스레드나 task processing 중에 일정 시간이 지난 뒤에 작동해야할 코드에서는 사용하기엔 바람직하지 못하다 볼 수 있다.
그러므로 2번이 가장 바람직한 방법이다.
certain period of time이 지나도 현재에 대한 콘솔 핸들 윈도우를 구할 수 있기 때문이다.
#include "pch.h"
#include <iostream>
#include <windows.h>
int main()
{
auto activeWindow1 = ::GetCurrentProcess();
auto activeWindow2 = ::GetConsoleWindow();
auto activeWindow3 = ::GetActiveWindow();
auto activeWindow4 = ::GetForegroundWindow();
std::cout << "GetCurrentProcess:\t\t" << activeWindow1 << "\n";
std::cout << "GetConsoleWindow:\t\t" << activeWindow2 << "\n";
std::cout << "GetActiveWindow:\t\t" << activeWindow3 << "\n";
std::cout << "GetForegroundWindow:\t\t" << activeWindow4 << "\n";
}
핸들 값은 실행할 때마다 바뀔 수 있다.
아래 사진은 테스트 결과이다. 0x00000000과 0xFFFFFFFF 값은 존재하지 않는 핸들이라고 봐야한다.