如何以编程方式获取Linux的窗口和系统的分辨率?

gc *_*c . 10 c++ linux screen-resolution

我试图在Linux系统上获得屏幕的分辨率以及特定窗口(程序正在运行的程序)的分辨率.我不需要修改分辨率,我只需要当前的值.据我所知,我们可以在Windows上调用一些系统函数,我们怎样才能在Linux上执行,最好是使用C/C++语言?提前致谢.

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

小智 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);
     // ...
  }
Run Code Online (Sandbox Code Playgroud)

您可以在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));
Run Code Online (Sandbox Code Playgroud)


And*_*w Y 6

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

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


Flo*_*ian 6

要看: