我试图在 Linux 系统上获取屏幕的分辨率以及特定窗口(程序正在其中运行)的分辨率。我不需要修改分辨率,我只需要当前值。据我所知,我们可以在Windows上调用一些系统函数来做到这一点,我们如何在Linux上做到这一点,最好使用C/C++语言?提前致谢。
更新:实际上,我不需要做一个 GUI,虽然我知道 Qt 和 GTK+ 可以做到,但我不愿意包含一个外部库来获得分辨率。
我试图在 Linux 系统上获取屏幕的分辨率以及特定窗口(程序正在其中运行)的分辨率。我不需要修改分辨率,我只需要当前值。据我所知,我们可以在Windows上调用一些系统函数来做到这一点,我们如何在Linux上做到这一点,最好使用C/C++语言?提前致谢。
更新:实际上,我不需要做一个 GUI,虽然我知道 Qt 和 GTK+ 可以做到,但我不愿意包含一个外部库来获得分辨率。
要获得屏幕分辨率,您可以使用 XRandR 扩展,例如在xrandr源中:
SizeID current_size;
XRRScreenSize *sizes;
dpy = XOpenDisplay (display_name);
// ...
root = RootWindow (dpy, screen);
sc = XRRGetScreenInfo (dpy, root);
current_size = XRRConfigCurrentConfiguration (sc, ¤t_rotation);
sizes = XRRConfigSizes(sc, &nsize);
for (i = 0; i < nsize; i++) {
printf ("%c%-2d %5d x %-5d (%4dmm x%4dmm )",
i == current_size ? '*' : ' ',
i, sizes[i].width, sizes[i].height,
sizes[i].mwidth, sizes[i].mheight);
// ...
}
您可以在 xterm 中看到输入“xrandr”的输出。
或者,更好的是,使用xdpyinfo方法:
Display *dpy;
// dpy = ...
int scr = /* ... */
printf (" dimensions: %dx%d pixels (%dx%d millimeters)\n",
DisplayWidth (dpy, scr), DisplayHeight (dpy, scr),
DisplayWidthMM(dpy, scr), DisplayHeightMM (dpy, scr));
在 X11 中,您需要调用 Xlib 的XGetWindowAttributes来获取各种窗口信息,包括相对于父窗口的大小和位置。有关如何使用它的示例,您可以 google 搜索“xwininfo.c”。
也就是说,您可能会使用一些更高级的框架来进行窗口编程 - 并且它已经有一些其他原语的可能性很高,请参见Qt的示例- 所以您可能想提供更多背景知识关于这个问题。
要看:
QApplication::desktop()->screenGeometry()(见http://doc.qt.digia.com/4.0/qdesktopwidget.html)
命令行工具 xdpyinfo 为您提供此信息;正如 Andrew Y 解释的那样,要以编程方式执行此操作,您需要使用 Xlib。