当前位置: 代码迷 >> 综合 >> VC++ Win API 获取屏幕数量和分辨率和位置等信息
  详细解决方案

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

热度:86   发布时间:2023-10-19 11:51:35.0

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

	//枚举所有屏幕 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);}

 

  相关解决方案