Pergunta

Eu preciso de uma maneira de programaticamente detectar se o monitor é grande ou não, no Windows.

GetSystemMetrics retorna o tamanho da área de trabalho, que tipo de obras, mas se um usuário tem um monitor widescreen, digamos, 1024x768, vou incorretamente classificá-lo como não-largura.

GetDeviceCaps tem problemas semelhantes com HORZRES e VERTRES, e até mesmo HORZSIZE E VERTSIZE dar resultados incorretos quando um não-wide resolução é usado em uma ampla monitor.

Existe alguma maneira de detectar isso de forma confiável?

Foi útil?

Solução

Você pode ser capaz de obter o tamanho físico real através EDID . Veja aqui: Como obter o correto tamanho físico do monitor?

Outras dicas

Aqui está uma versão melhor que não mexer com o EDID ou o registro. Ele faz a suposição (que é IMHO muito preciso), a resolução máxima suportada pela tela é o melhor ajuste nativa.

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";

Felicidades.

tentar SystemInformation.PrimaryMonitorSize

A coisa sensata seria monitores Classificar por largura e altura proporção. Isso é o que eu vejo um monte de jogos que fazem estes dias.

Se você pode obter a largura, então provavelmente você pode obter a altura. Depois disso, a resposta é apenas uma pequena operação matemática de distância.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top