10

Linuxシステムで画面の解像度と特定のウィンドウ(プログラムが実行されている)の解像度を取得しようとしています。解像度を変更する必要はありません。必要なのは現在の値だけです。私の知る限り、Windowsでこれを行うためにいくつかのシステム関数を呼び出すことができますが、Linuxで、できればC / C ++言語を使用してそれを行うにはどうすればよいですか?前もって感謝します。

更新:実際には、GUIを実行する必要はありませんが、QtとGTK +で実行できることはわかっていますが、解像度を取得するためだけに外部ライブラリを含めることには消極的です。

4

4 に答える 4

9

画面の解像度を取得するには、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));
于 2009-07-20T13:36:05.773 に答える
6

X11では、XlibのXGetWindowAttributesを呼び出して、親に対するサイズや位置など、さまざまなウィンドウ情報を取得する必要があります。使用方法の例として、「xwininfo.c」をグーグルで検索できます。

そうは言っても、おそらくウィンドウプログラミングを行うために、より高レベルのフレームワークを使用することになります-そして、これにはすでに他のプリミティブがいくつかある可能性が高いです。Qtの例を参照してください-もう少し背景を説明したいと思うかもしれません質問について。

于 2009-07-20T12:21:24.593 に答える
6

依存:

  • あなたが筋金入りでXlibを使いたいのなら、XDisplayWidth()とXDisplayHeight()を見てください。
  • Qt4(私の好み)を使用する場合は、
    QApplication :: desktop()-> screenGeometry()
    http://doc.qt.digia.com/4.0/qdesktopwidget.htmlを参照)
  • またはGtkで、http://library.gnome.org/devel/gdk/stable/GdkScreen.htmlを参照してください
于 2009-07-20T12:25:14.547 に答える
0

コマンドラインツールxdpyinfoは、この情報を提供します。Andrew Yが説明するように、プログラムでそれを行うには、Xlibを使用する必要があります。

于 2009-07-20T12:23:56.670 に答える