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

标签 c++ linux screen-resolution

我正在尝试获取屏幕的分辨率以及 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, &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));

关于c++ - 如何以编程方式在 Linux 中获取窗口和系统的分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1153052/

相关文章:

将命令发送到指定控制台的 C 代码

Matlab UI 控制单元

ios - 如何在不同分辨率的不同设备上使用图像?

ios - iPhone @2x 在 Sketch 中的设计问题

c++ - 如何在 C++ 中的字符串中显示摄氏度

C++ 变量不变

C++ promise / future : Which to return from a function?

如果 C++ 结构成员函数定义在结构体之外定义,它们会有差异吗?

c - 为什么我们还需要 read() 和 write() 系统调用,为什么我们不能用 ioctl 系统调用来代替它们?

Linux 终端八进制形式的 chmod