VC++ Win API 获取屏幕数量和分辨率和位置等信息

这里给出了可以使用的代码 但有待优化 期望有朋友给出建议

	//枚举所有屏幕 
	DISPLAY_DEVICE ddDisplay;
	ZeroMemory(&ddDisplay, sizeof(ddDisplay));
	ddDisplay.cb = sizeof(ddDisplay);
	DEVMODE dm;
	ZeroMemory(&dm, sizeof(dm));
	dm.dmSize = sizeof(dm);
	//获取屏幕数量
	int screenNUm = GetSystemMetrics(SM_CMONITORS);
	if (screenNUm < 2)
	{
		//L"未发现第二个屏幕,请检查投影是否正常分屏"
	}
	//因为屏幕不是连续的所以需要逐个遍历 具体应该遍历多个才合适我不请
	//期望专业人士给予指点 默认屏幕在0位 但是接入的屏幕不在1位
	for (char i = 1; i < screenNUm + 10; i++)
	{
		//下一步活为了获得每个显示设备的名字
		int flag = EnumDisplayDevices(NULL, i, &ddDisplay, NULL);
		flag = flag&&EnumDisplaySettings(ddDisplay.DeviceName, ENUM_CURRENT_SETTINGS, &dm);
		if (!flag)
		{
			continue;
		}
		HDC desktopDc = GetDC(NULL);
		int DPI = GetDeviceCaps(desktopDc, LOGPIXELSX);
		DeleteDC(desktopDc);
		float Bili;//屏幕的放大比例 
		switch (DPI)
		{
		case 96:
			Bili = 1.0;
			break;
		case 120:
			Bili = 1.25;
			break;
		case 144:
			Bili = 1.50;
			break;
		case 192:
			Bili = 2.00;
			break;

		default:
			break;
		}
		//这里拿到了第二屏幕的尺寸信息
		CRect Sc2Rect = CRect(dm.dmPosition.x*Bili,
			dm.dmPosition.y*Bili, 
			(dm.dmPosition.x + dm.dmPelsWidth)*Bili, 
			(dm.dmPosition.y + dm.dmPelsHeight)*Bili);
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章