[winapi] 실행 중인 응용프로그램 목록 가져오기

alirz-pixel·2022년 10월 10일
0

winapi

목록 보기
1/2

EnumWindows

실행 중인 응용프로그램 목록을 가져오고 싶을 땐, EnumWindows 함수를 사용하면 된다.

BOOL EnumWindows(
    [in] WNDENUMPROC  lpEnumFunc, // 사용자 정의 함수
    [in] LPARAM       lParams     // 사용자 정의 함수에 보낼 인자
)

EnumWindows정의한 callback 함수 lpEnumFunc가 TRUE를 반환하면,
다음 HWND(Handle Windows)를 가져오는 방식이다.


사용법

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam) {
	return TRUE;
}

EnumWindows(EnumWindowsProc, (LPARAM)NULL);




사용자가 보고있는 프로세스의 목록만 보고 싶을 경우

EnumWIndows는 백그라운드 프로세스까지 검색하는데,
만약, 실제로 보고있는 프로세스 목록만 검색하고 싶을 경우 아래의 코드를 추가해주면 된다.

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam) {
	BOOL isVisible = IsWindowVisible(hwnd);
	if (!isVisible) {
		return TRUE;
	}
    
	return TRUE;
}

EnumWindows(EnumWindowsProc, (LPARAM)NULL);




window title 출력하기

응용 프로그램명에 영어 뿐만 아니라 다른 언어가 들어올 수 있으므로
1 byte를 가지는 char 대신 2 byte를 가지는 wchar_t를 사용해야 한다.

#include <Windows.h>
#include <string>
#include <iostream>
#define MAX_STR_LENGTH 1024

static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam) {
	int length = GetWindowTextLength(hwnd);
	BOOL isVisible = IsWindowVisible(hwnd);
	if (!isVisible || length == 0) {
		return TRUE;
	}

	wchar_t windowTitle[MAX_STR_LENGTH];
	GetWindowTextW(hwnd, windowTitle, MAX_STR_LENGTH);
	std::wstring title(&windowTitle[0]);
	std::cout << hwnd << " ";
	std::wcout << windowTitle;
	std::cout << "\n";

	return TRUE;
}

int main() {
	std::wcout.imbue(std::locale("korean"));

	EnumWindows(EnumWindowsProc, NULL);
	return 0;
}

wchar_t 타입을 출력하고자 할 경우, cout이 아닌 wcout을 사용해줘야 한다.
그리고 wstring은 한글을 위한 자료형이 아니기 때문에 cout.imbue(locale("korean")) 을 통해 따로 명시해줘야 한다.

0개의 댓글