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);
	}

 

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