10

我试图在 Linux 系统上获取屏幕的分辨率以及特定窗口(程序正在其中运行)的分辨率。我不需要修改分辨率,我只需要当前值。据我所知,我们可以在Windows上调用一些系统函数来做到这一点,我们如何在Linux上做到这一点,最好使用C/C++语言?提前致谢。

更新:实际上,我不需要做一个 GUI,虽然我知道 Qt 和 GTK+ 可以做到,但我不愿意包含一个外部库来获得分辨率。

4

4 回答 4

9

要获得屏幕分辨率,您可以使用 XRandR 扩展,例如在xrandr源中:

  SizeID        current_size;
  XRRScreenSize *sizes;
  dpy = XOpenDisplay (display_name);
  // ...
  root = RootWindow (dpy, screen);
  sc = XRRGetScreenInfo (dpy, root);
  current_size = XRRConfigCurrentConfiguration (sc, &current_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));
于 2009-07-20T13:36:05.773 回答
6

在 X11 中,您需要调用 Xlib 的XGetWindowAttributes来获取各种窗口信息,包括相对于父窗口的大小和位置。有关如何使用它的示例,您可以 google 搜索“xwininfo.c”。

也就是说,您可能会使用一些更高级的框架来进行窗口编程 - 并且它已经有一些其他原语的可能性很高,请参见Qt的示例- 所以您可能想提供更多背景知识关于这个问题。

于 2009-07-20T12:21:24.593 回答
6

要看:

于 2009-07-20T12:25:14.547 回答
0

命令行工具 xdpyinfo 为您提供此信息;正如 Andrew Y 解释的那样,要以编程方式执行此操作,您需要使用 Xlib。

于 2009-07-20T12:23:56.670 回答