Я пытаюсь получить разрешение экрана, а также разрешение определенного окна (в котором работает программа) в системе Linux. Мне не нужно изменять разрешение, мне нужны только текущие значения. Насколько я знаю, мы можем назвать некоторые системные функции для Windows, как мы можем это сделать в Linux, желательно с использованием языка C/С++? Спасибо заранее.
update: На самом деле, мне не нужно делать графический интерфейс, хотя я знаю, что Qt и GTK + могут это сделать, я не хочу включать внешнюю библиотеку для получения разрешения.
Ответ 1
В X11 вам нужно будет вызвать Xlib XGetWindowAttributes, чтобы получить информацию о различных окнах, включая размер и положение относительно родитель. Для примера того, как он используется, вы можете google для "xwininfo.c".
Тем не менее, возможно, вы собираетесь использовать еще несколько высокоуровневых фреймворков для программирования окон, и шансы на то, что у него уже есть некоторые другие примитивы, см. пример Qt - так что вы можете дать немного больше информации об этом вопросе.
Ответ 2
Чтобы получить разрешение экрана, вы можете использовать расширение XRandR, например, в xrandr источниках:
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);
// ...
}
Вы можете видеть вывод, набирающий "xrandr" в вашем xterm.
Или, лучше, используйте метод 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));
Ответ 3
Зависит:
Ответ 4
Инструмент командной строки xdpyinfo предоставляет эту информацию для вас; чтобы сделать это программно, вам нужно использовать Xlib, как объясняет Andrew Y.