How to programmatically get the resolution of a window and that of the system in Linux?

孤人 提交于 2019-12-20 12:32:07

问题


I'm trying to get the resolution of the screen as well as the resolution of a specific window (in which a program is running) on Linux system. I don't need to modify the resolution, I only need the current values. As far as I know, we can call some system functions to do so on Windows, how can we do that on Linux, preferably using C/C++ language? Thanks in advance.

update: Actually, I don't need to do a GUI, although I know Qt and GTK+ can do it, I'm reluctant to include an external library for just getting the resolution.


回答1:


In X11, you'd need to call the Xlib's XGetWindowAttributes to get the various window info, including the size and position relative to parent. For an example of how it is used, you can google for 'xwininfo.c'.

That said, probably you are going to use some more highlevel framework to do your window programming - and the chances are high that it already has some other primitives for this, see an example for Qt - so you might want to give a bit more background about the question.




回答2:


To get screen resolution, you can use XRandR extension, like in xrandr sources:

  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);
     // ...
  }

You can see the output typing "xrandr" in your xterm.

Or, better, use the xdpyinfo method:

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));



回答3:


Depends:

  • If you're hardcore and you want to use Xlib, have a look at XDisplayWidth() and XDisplayHeight().
  • If you use Qt4 (my preference), try
     QApplication::desktop()->screenGeometry() 
    (see http://doc.qt.digia.com/4.0/qdesktopwidget.html )
  • Or in Gtk, see http://library.gnome.org/devel/gdk/stable/GdkScreen.html



回答4:


The command line tool xdpyinfo provides this information for you; to do it programmatically you need to to use Xlib, as Andrew Y explains.



来源:https://stackoverflow.com/questions/1153052/how-to-programmatically-get-the-resolution-of-a-window-and-that-of-the-system-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!