簡體   English   中英

如何檢測Windows中的顯示器是否為寬屏

[英]How to detect whether a monitor is widescreen in Windows

在Windows中,我需要一種以編程方式檢測顯示器是否寬的方法。

GetSystemMetrics返回桌面的大小,這種方式有效,但如果用戶有寬屏顯示器,比如1024x768,我會錯誤地將其分類為非寬范圍。

GetDeviceCaps與HORZRES和VERTRES有類似的問題,當在寬監視器中使用非寬分辨率時,甚至HORZSIZE和VERTSIZE也會給出錯誤的結果。

有沒有辦法可靠地檢測到這個?

您可以通過EDID獲得實際的物理尺寸。 請參見此處: 如何獲得正確的顯示器物理尺寸?

這是一個更好的版本,不會弄亂EDID或注冊表。 它使得假設(IMHO非常准確)的假設是顯示器支持的最大分辨率是最佳的原生適合度。

DEVMODEA modeInfo;
modeInfo.dmSize = sizeof(DEVMODEA);
modeInfo.dmDriverExtra = NULL;
int modeNum = 0;
int xMax = 0, yMax = 0;
while (EnumDisplaySettingsExA(0, modeNum, &modeInfo, 0)) {
    ++modeNum;
    if (modeInfo.dmPelsWidth > xMax) {
        xMax = modeInfo.dmPelsWidth;
        yMax = modeInfo.dmPelsHeight;
    }
}
cout << "Monitor aspect ratio : " << (double)xMax/yMax << "\n";

干杯。

嘗試SystemInformation.PrimaryMonitorSize

明智的做法是按寬度與高度的比例對顯示器進行分類。 這就是我現在看到的很多游戲。

如果你可以得到寬度,那么你可以得到高度。 在那之后,答案只是一個小的數學運算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM