2017-03-24 2 views
0

Toutes mes recherches conduisent à des réponses sur comment obtenir la géométrie de l'écran actif dans X11 en utilisant C, mais cet écran peut contenir plusieurs moniteurs, et il n'y a normalement qu'un seul écran à moins que de nombreux utilisateurs n'utilisent simultanément le même ordinateur.En C, comment obtenir la géométrie (x, y, largeur, hauteur) du moniteur actif dans l'écran en utilisant X11

Ces réponses sur l'obtention de la géométrie d'écran sont obsolètes car elles ne prennent pas en compte plusieurs moniteurs. Alors, comment puis-je obtenir la géométrie (x, y, largeur, hauteur) du moniteur sur lequel est placé le pointeur de la souris ou la fenêtre active? Je voudrais la géométrie par rapport à l'écran.

Répondre

1

Vous devez utiliser l'API d'extension RandR. Obtenez le code source de l'utilitaire xrandr et volez ce dont vous avez besoin à partir de là. Vous avez besoin de la fonction XRRGetMonitors et des structures de données associées. Vous pouvez également utiliser xrandr pour obtenir les informations dont vous avez besoin sur la ligne de commande.

Je ne sais pas s'il existe un moniteur actif, car une fenêtre active peut s'étendre sur plusieurs moniteurs et un pointeur peut se trouver dans un autre moniteur. Quoi qu'il en soit, la structure XRRMonitorInfo contient toutes les informations sur la géométrie de votre moniteur, y compris sa taille (en pixels et en mm) et sa position sur l'écran logique, afin que vous puissiez extraire une description du moniteur à partir d'une paire de coordonnées.

Voir aussi this answer.

+0

Gdk + 3.0 3.22 répond à la question de savoir ce qu'est le moniteur actif en fournissant le moniteur sur lequel se trouve la plus grande partie de la fenêtre active. Je ne suis pas sûr d'essayer de faire tout cela en X11, mais si La réponse ressemble au chemin à parcourir (et copie les idées pour trouver le «meilleur» moniteur sur https://github.com/GNOME/gtk/blob/master/gdk/gdkdisplay.c à partir de la ligne 2466). –