使用纯 C(不是 C++/C#/Objective-C)如何在 Windows 中获得屏幕分辨率?
我的编译器是 MingW(不确定是否相关)。我在网上找到的所有解决方案都适用于 C++ 或其他一些 C 变体。
使用纯 C(不是 C++/C#/Objective-C)如何在 Windows 中获得屏幕分辨率?
我的编译器是 MingW(不确定是否相关)。我在网上找到的所有解决方案都适用于 C++ 或其他一些 C 变体。
DWORD dwWidth = GetSystemMetrics(SM_CXSCREEN);
DWORD dwHeight = GetSystemMetrics(SM_CYSCREEN);
您必须通过包含windows.h
在代码中来使用 Windows API。MingW 可能已经带有这个头文件。
#include <windows.h>
void GetMonitorResolution(int *horizontal, int *vertical) {
*height = GetSystemMetrics(SM_CYSCREEN);
*width = GetSystemMetrics(SM_CXSCREEN);
}
您的问题已经得到解答:如何从 hWnd 获取显示器屏幕分辨率?.
HMONITOR monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
MONITORINFO info;
info.cbSize = sizeof(MONITORINFO);
GetMonitorInfo(monitor, &info);
int monitor_width = info.rcMonitor.right - info.rcMonitor.left;
int monitor_height = info.rcMonitor.bottom - info.rcMonitor.top;
如果有人需要,适用于 LINUX
我在Ubuntu 20.04上试了一下,效果很好!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned short *get_screen_size(void)
{
static unsigned short size[2];
char *array[8];
char screen_size[64];
char* token = NULL;
FILE *cmd = popen("xdpyinfo | awk '/dimensions/ {print $2}'", "r");
if (!cmd)
return 0;
while (fgets(screen_size, sizeof(screen_size), cmd) != NULL);
pclose(cmd);
token = strtok(screen_size, "x\n");
if (!token)
return 0;
for (unsigned short i = 0; token != NULL; ++i) {
array[i] = token;
token = strtok(NULL, "x\n");
}
size[0] = atoi(array[0]);
size[1] = atoi(array[1]);
size[2] = -1;
return size;
}
int main(void)
{
unsigned short *size = get_screen_size();
printf("Screen resolution = %dx%d\n", size[0], size[1]);
return 0;
}
如果您有任何问题,请不要犹豫!:)