[Visual C++] 모니터 정보 알아오기

spring·2020년 11월 9일
0

######1. 주 모니터 해상도.

GetSystemMetrics(SM_CXSCREEN); //가로 해상도
GetSystemMetrics(SM_CYSCREEN); //세로 해상도

######2. 전체 모니터 해상도.

GetSystemMetrics(SM_CXVIRTUALSCREEN);  //전체 가로 해상도
GetSystemMetrics(SM_CYVIRTUALSCREEN);  //전체 세로 해상도

######3. 모든 모니터 좌표 정보.

//#include<WinUser.h>  //GetSystemMetrics,
//#include<wingdi.h>   //DISPLAY_DEVICEA, DEVMODEA
//#include<minwinbase.h>  //ZeroMemory
int N = GetSystemMetrics(SM_CMONITORS);    //모니터 개수
DISPLAY_DEVICEA dd;
DEVMODEA dm;
std::vector<CRect> mrect;
for (size_t i = 0; i < N; i++) {
	::ZeroMemory(&dd, sizeof(DISPLAY_DEVICEA));
	dd.cb = sizeof(DISPLAY_DEVICEA);
	EnumDisplayDevicesA(nullptr, i, &dd, 0);
	::ZeroMemory(&dm, sizeof(DEVMODEA));
	if (EnumDisplaySettingsA(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm)) {
		mrect.push_back(CRect(dm.dmPosition.x, dm.dmPosition.y, dm.dmPosition.x + dm.dmPelsWidth, dm.dmPosition.y + dm.dmPelsHeight));
	}
}

######4. 현재 프로세스가 위치한 모니터 좌표.

MONITORINFOEXA monitor;
monitor.cbSize = sizeof(MONITORINFOEXA);
CRect rect;
wnd->GetWindowRect(&rect);
HMONITOR hMOnitor = MonitorFromRect(&rect, MONITOR_DEFAULTTONEAREST);
GetMonitorInfoA(hMOnitor, &monitor);
CRect mrect = monitor.rcWork;

MONITORINFOEXA::rcWork 는 화면에서 작업 가능한 영역이다.(일반적으로 작업 표시줄을 제외한 크기).
######5.작업 표시줄 크기 구하기.

CRect taskbar;
::SystemParametersInfoA(SPI_GETWORKAREA, 0, &taskbar, 0);
profile
Researcher & Developer @ NAVER Corp | Designer @ HONGIK Univ.

0개의 댓글