Largura e altura inadequadas para o segundo monitor de GetMonitorInfo e GetDeviceCaps

Estou tentando obter o canto superior esquerdo x, y e canto inferior direito x, y. E calcule a largura e a altura dos monitores.

Meu monitor secundário é 1920x1080, como visto na captura de tela das configurações de exibição:

Estou recebendo as dimensões do monitor de duas maneiras. O código abaixo é js-ctypes, mas simplifiquei toda a verificação de erros e outras coisas de ctypes e tentei fazer com que parecesse c. Mas este é um problema winapi, não ctypes, portanto, não marquei o tópico com ele.

Primeira abordagem:

cPoint = POINT();
GetCursorPos(&cPoint);


cMon = MonitorFromPoint(cPoint, MONITOR_DEFAULTTONEAREST);


cMonInfo = MONITORINFOEX();
cMonInfo.cbSize = MONITORINFOEX.size;
GetMonitorInfo(cMon, &cMonInfo);

lpszDriver = null;
lpszDevice = cMonInfo.szDevice;

xTopLeft = cMonInfo.rcMonitor.left;
yTopLeft = cMonInfo.rcMonitor.top;
nWidth = cMonInfo.rcMonitor.right - xTopLeft;
nHeight = cMonInfo.rcMonitor.bottom - yTopLeft;

Isso está fornecendo um resumo do seguinte:

_RECT(-1920, -1080, -640, -360)

Fazendo a direita - esquerda dá 1280 Fazendo a parte inferior - superior dá 720

As dimensões estão definitivamente erradas. Deveria ter largura de 1920 e altura de 1080.

Então eu tento o segundo método:

hdcScreen = CreateDC(lpszDriver, lpszDevice, null, null);
nWidth = GetDeviceCaps(hdcScreen, HORZRES);
nHeight = GetDeviceCaps(hdcScreen, VERTRES);

Isso me dá a mesma coisa, largura de 1280 e altura de 720. Minha mente está confusa! Como posso obter 1920x1080?

Esse mesmo método me fornece as dimensões corretas para o meu monitor principal, por isso estou muito confuso.

EDITAR

Eu apenas agora tentei um terceiro método, e ainda os mesmos problemas:

var jsMonitorEnumProc = function(hMonitor, hdcMonitor, lprcMonitor, dwData) {
    xTopLeft = lprcMonitor.contents.left;
    yTopLeft = lprcMonitor.contents.top;
    nWidth = lprcMonitor.contents.right - xTopLeft;
    nHeight = lprcMonitor.contents.bottom - yTopLeft;

    return true;
}
EnumDisplayMonitors(null, null, jsMonitorEnumProc, 0);

Isso me dá rects do seguinte:

_RECT(0, 0, 1280, 1024)
_RECT(-1920, -1080, -640, -360)

O primeiro é o meu monitor principal e vemos que a parte inferior superior dá 1280 e a direita e esquerda dá 1024, o que é correto. O monitor principal é 1280 x 1024.

Mas o segundo monitor novamente é -360 - -1080 para 720 de altura e -640 - -1920 para 1280 de largura. Estou usando isso para tirar screenshots de todos os monitores e os segundos serão cortados.

questionAnswers(0)

yourAnswerToTheQuestion