티스토리 뷰

IT/C, C++

[C/C++] 현재 실행한 콘솔 프로그램 윈도우에 대한 핸들 구하기

주인장 진빼이

콘솔 프로그램을 실행하고 실행했던 콘솔 프로그램 윈도우에 대한 핸들을 구할 때가 종종 있다.

핸들을 구할 수 있는 방법은 무수히 많다. 너무 많아서 다 나열하기 힘들다.

 

자주쓰이거나 편하게 쓸 수 있는 방법 중 몇가지를 나열해보았다.

아래 리스트 중에 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 값은 존재하지 않는 핸들이라고 봐야한다.

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함