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

前端 未结 4 482
庸人自扰
庸人自扰 2021-02-06 00:06

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 resol

4条回答
  •  清酒与你
    2021-02-06 00:37

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

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

提交回复
热议问题