Obtenga las dimensiones actuales de la pantalla a través de Xlib usando C

Obtenga las dimensiones actuales de la pantalla a través de Xlib usando C

¿Hay alguna forma de obtener las dimensiones de una pantalla a través de Xlib usando C? Intenté consultar los documentos de X.org (https://tronche.com/gui/x/xlib/display/screen-information.html), y sólo me da macros que no aceptan números enteros, así que estoy perdido.

Utilicé específicamente estas funciones de esta manera:

int sx;
int sy;
XWidthOfScreen(sx);
XWidthOfScreen(sy);

...

move_window(sx / 4)
move_window(sy / 4)

Soy un novato en la programación en C y estoy trabajando en mi primer proyecto.

Respuesta1

Este es un ejemplo simple, que imprimirá el tamaño de visualización y moverá la ventana del emulador de terminal en el que se ejecuta (si está configurado correctamente en la WINDOWIDvariable de entorno) a ancho/4, alto/4:

#include <X11/Xlib.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>

int main(int ac, char **av){
        char *wid; Display *dpy; Window w;
        int width, height, snum;
        if(!(dpy = XOpenDisplay(0)))
                errx(1, "cannot open display '%s'", XDisplayName(0));
        snum = DefaultScreen(dpy);
        width = DisplayWidth(dpy, snum);
        height = DisplayHeight(dpy, snum);
        printf("display size is %d x %d\n", width, height);
        if((wid = getenv("WINDOWID")) && (w = strtoul(wid, 0, 0))){
                XMoveWindow(dpy, w, width / 4, height / 4);
                XSync(dpy, False);
        }
        return 0;
}

Mi consejo sería una copia deEl manual de programación del X11, que es un HTML de una sola página en el que puedes buscar y que contiene todo lo relacionado con la programación de X11.

Tenga en cuenta que puede haber bibliotecas más amigables o portátiles, como gtk, qt, sdl, etc. Es posible que desee utilizar una de ellas en lugar de libX11 directamente.

información relacionada