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.
EDITAREu 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.