- XLib: Собираем информацию об окнах в Linux
- Реализация
- [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Re: [KDE4] Узнать ID процесса, которому принадлежит окно
- Как определить название текущего окна с помощью баша
- Re: Как определить название текущего окна с помощью баша
- Re: Как определить название текущего окна с помощью баша
- Re: Как определить название текущего окна с помощью баша
- Re: Как определить название текущего окна с помощью баша
- Re: Как определить название текущего окна с помощью баша
- как получить идентификатор окна для xdotool автоматически
- 3 ответа
- Узнать имя окна в фокусе (текущего окна) через X11lib
XLib: Собираем информацию об окнах в Linux
Поставим задачу: создать Linux-приложение, которое находит все окна графической оболочки и выводит для них заголовки, координаты (положение на экране) и размер (высоту и ширину).
Решение: используем возможности библиотеки XLib , а именно ее функции: XGetWindowProperty() и XGetWindowAttributes() .
- Открываем экран по умолчанию;
- Находим идентификаторы всех окон с помощью XGetWindowProperty() (создадим вспомогательную функцию findWindows() ;
- Для каждого окна определяем заголовок с помощью той же функции XGetWindowProperty() (создаем функцию getWindowName() ). Дополнительно запрашиваем атрибуты окна (координаты и размер) с помощью XGetWindowAttributes() .
Пример вывода для окна браузера Chromium :
Реализация
Несколько замечаний по реализации:
- Для успешной сборки проекта необходимо подключить библиотеку X11 : LIBS += -lX11 ;
- Не все окна выдают свое имя в формате UTF-8 , поэтому в качестве запасного варианта мы запрашиваем хоть какой-то идентифицирующий окно текст, вызывая XGetWindowProperty() с параметром WM_NAME ;
- Для вывода текста в формате UTF-8 на консоль Linux не забываем настроить кодировку приложения setlocale( LC_ALL, «» ) ;
- Координаты левого верхнего угла окна (без учета рамки), которые возвращает XGetWindowAttributes() , отложены в системе координат самого этого окна, но нас интересуют абсолютные координаты окна на экране. Поэтому мы выполняем преобразование точки (x; y) в систему координат родительского окна с помощью XTranslateCoordinates() .
Источник
[KDE4] Узнать ID процесса, которому принадлежит окно
Как узнать какому процессу принадлежит окно. Появилось окошко без элементов и опознавательных знаков, закрывает большую часть десктопа.
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
Спасибо за внимание, вопрос снят — xwininfo
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
Может быть xprop’ом попробовать?
Алсо, adware детектед 🙂
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
> Алсо, adware детектед 🙂
Как оказалось это root window отрисовывается поверх plasma. 🙁
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
есть такая команда xkill — вызывается по ctrl-alt-esc
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
>вызывается по ctrl-alt-esc
у меня не вызывается 🙂
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
а у меня вызывается, причем не знал о такой комбинации раньше 8)
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
в нормальных дистрибутивах вызывается
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
кстати полезная комбинация на случай когда ff или еще какой монстр начинает чюдить
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
debian не нормальный дистр? 🙂
xkill установлен, специально ничего не менял
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
>>debian не нормальный дистр? 🙂 xkill установлен, специально ничего не менял
ленни, по упомянутой комбинации клавиш xkill вызывается
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
у меня тестинг (правда не сильно свежий), не работает. Возможно зависит от ДЕ.
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
ну вот пришел на работу, здесь sid, четверокеды — xkill есть.
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
Когда я последний раз видел debian, ctrl-alt-esc работал.
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
Sid, KDE 4.3 — работает. И рисует забавный курсор 🙂
Re: [KDE4] Узнать ID процесса, которому принадлежит окно
у меня кеды 3.5 еще. xkill в системе есть, отдельно запускается и работает. Но на ctrl-alt-esc никакой реакции. Смотрел в настройках кед, на это сочетание вроде бы ничего не повешено. Еще бы знать кто это сочетание обрабатывает.
Источник
Как определить название текущего окна с помощью баша
Хочу настроить себе кнопки мыши. Одна выполняет действие Ctrl-w — закрытие окна. Но для некоторых прог нужно альт-ф4 и т.п. Но нужно знать название приложения, которое сейчас активно. Как это сделать в KDE? дкоп вроде такого не позволяет.
Re: Как определить название текущего окна с помощью баша
Re: Как определить название текущего окна с помощью баша
Наверное что-то вроде
Правда им нужен id или name окна.
Re: Как определить название текущего окна с помощью баша
> И зачем это вешать на мышь?
> Если есть окна где некуда ткнуть мышью для закрытие в скрипте предварительно вызывай xprop и щелкай на нужное окно (ну будет один лишний клик)
Есть лишние кнопки на мышке(логитех мх310). Когда браузишься только мышкой, очень удобно все основные действия разбросать по кнопкам.
На одну из этих кнопок я повесил комбинацию ктрл-в. Кликнул по кнопочке — окошко закрылось. Теперь хочется такой же функционал для других программ. Там иногда работает ктрл-в, но иногда нужно альт-ф4. Чтобы определить какую комбинацию вызывать нужно знать название программы. Поэтому нужно просто название текущего активного окна (там обычно и пишется название проги).
В посте выше написали две команды. Но для них нужен pid. Может кто знает как определить пид активного окна?
Re: Как определить название текущего окна с помощью баша
>Но для них нужен pid. Может кто знает как определить пид активного окна?
pid — proccess ID здесь не причем. Кстати, нельзя сопоставить произвольному окну конкретный pid
Касаемо xprop, запусти его без параметров и он предложит щелкнуть на каком-либо окне и выдаст инфу об этом окне (я указывал ранее на то что потребуется лишний клик). По инфе от xprop, узнаешь (из своей таблицы) что посылать окну для его закрытия.
Re: Как определить название текущего окна с помощью баша
KDE такое умеет «искаропки». Настраиваешь Input sequence типа Keyboard Shortcut -> Keyboard input (IIRC, сейчас я дома по виндой), указываешь у него условие срабатыванися «актовно окно такое-то», и все.
Источник
как получить идентификатор окна для xdotool автоматически
Я пытаюсь автоматизировать тестирование форм, которые селен займет слишком много времени (тяжелые современные формы javascript), и я хочу использовать xdotool и получить идентификаторы окон. Я вижу, вы можете позвонить xdotool selectwindow и щелкнуть по нему, но тогда вам придется каждый раз щелкать по нему. Я хочу сказать это «для окон google chrome, где заголовок вкладки x, сделайте y»
У меня здесь ID окна:
Это для самого Chrome, каждая вкладка получает одно и то же значение при нажатии. Я ожидал найти это в ps или оконном менеджере, но нет:
И ps не работает:
Нигде не появляется 65011713. Xdotool — отличный инструмент, но манипуляции с окнами предполагают, что вы много знаете об окнах, и из того, что я помню о его использовании раньше, раздел WINDOW COMMANDS в https://www.semicomplete.com/projects/xdotool/xdotool.xhtml#window_commands есть много способов найти window, о котором вы много знаете, но не очень много о способах автоматизации получения информации об этом окне. Как я могу определить идентификатор окна (формат, который требуется xdotool) автоматически, например, путем подачи скрипту начальной части URL-адреса? Спасибо
Вы можете найти Google Chrome в wmtrl:
И возьмите первое число, разделенное пробелом, до int:
Флаг 16 в int сообщает, что он ожидает шестнадцатеричный
3 ответа
Вы можете использовать awk для извлечения идентификатора из вывода wmctrl -l .
xdotool , скорее всего, прекрасно воспримет эти шестнадцатеричные идентификаторы, но если нет, вы можете преобразовать их в десятичное представление с помощью strtonum :
Как сопоставить только окно, которое вы хотите получить из вывода в awk , зависит от вас и ваших требований.
Вероятно, стоит отметить, что xdotool , похоже, также имеет команду search , которая принимает всевозможные спецификаторы и шаблоны, которые вы можете использовать для получения идентификатора окна, с которым вы хотите работать. (Он даже поддерживает стек совпадений, который поддерживает специальный формат «идентификатора окна» для непосредственной работы с «связанными командами».)
Вы можете найти окно с помощью xdotool по имени, классу окна и т. Д. Чтобы найти окно по имени, используйте:
Это выведет десятичный идентификатор окна на стандартный вывод. Флаг —name соответствует части или всему имени окна. В браузере это обычно включает имя текущей вкладки. xdotool также может возвращать соответствующий pid следующим образом:
Он является примером отправки в окно серии нажатий клавиш и щелчков мыши.
Если вы работаете в системе Linux и используете диспетчер x-display, команда xwininfo для получения информации об окне может сработать для вас.
Вы можете запустить или написать сценарий команды xwininfo -root -tree и получить подробный и организованный вывод системы xwindows и идентификаторов окон. Вы можете увидеть, как я использовал вывод xwininfo в маленьком боте, который я создал для runescape. Я сохраняю шестнадцатеричный идентификатор заголовка окна, а затем конвертирую его в двоичный, используя printf %i и шестнадцатеричный код интересующего меня окна. Оттуда я могу выполнить сценарий xdotool , чтобы делать все, что я хочу, или с окном, сделав его активным окном и переместив к нему мышь с помощью xdotool .
Итак, шаги для этого метода:
- Получите информацию об окне, используя xwininfo -root -tree .
- Сохраните идентификатор интересующего вас окна. (Может быть несколько списков названия окна с разными шестнадцатеричные идентификаторы, и вам нужно будет знать родительский шестнадцатеричный идентификатор, который обычно первый в списке и обычно описывает дочерние процессы в
поддерево.) - Преобразуйте шестнадцатеричный идентификатор окна в двоичный, чтобы xdotool мог его распознать.
- Используйте опцию windowactivate с xdotool , чтобы получить xdotool для взаимодействия с правильным окном.
- Выполните все, что пожелаете.
Так что это действительно довольно просто, хотя поначалу занимает немного времени, но как только вы разработаете свой собственный метод хранения шестнадцатеричного идентификатора родительского окна, все остальное можно легко автоматизировать, и никаких проблем не возникнет. Если у вас возникли проблемы с определением шестнадцатеричного идентификатора родительского окна, существуют способы проверки родительских и дочерних процессов, но я не знаю, хотите ли вы углубиться во все это. Просто прокомментируйте, если хотите, чтобы я включил эту информацию.
Источник
Узнать имя окна в фокусе (текущего окна) через X11lib
Пытаюсь узнать имя текущего окна в фокусе пользователя. Когда запускаю программу в IDE, то в консоль выводится актуальное имя текущего окна, но когда переключаюсь на любое другое окно, в котором запущена другая программа, функция XFetchName() отрабатывает со статусом ошибки:
Почему так происходит? Возможно ли вообще получать имя окна в фокусе без сотен строчек кода?
P.S.: Вообще моя цель: достать текст, который выделяется двумя щелчками левой кнопки мышки, в произвольном текущем окне, где это возможно. Но я начал с освоения возможности поработать с текущим окном в фокусе.
Как узнать имя окна (обьекта), зная его хэндл?
Допустим, хэндл окна я узнаю так: HANDLE h=WindowFromPoint(Mouse->CursorPos); Класс так.
Узнать HWND главного окна процесса имея его имя?
Запускаем калькулятор Windows. Имя этого процесса (полученное с использованием PROCESSENTRY.
Как задать имя окна браузера Амиго для поиска дескриптора окна FindWindow
var h: HWND; begin h := FindWindow(nil, ‘Amigo’); if h > 0 then По Amigo результат.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как узнать margin-left любого элемента от главного окна окна браузера?
причем не важно какую вложенность имеет элемент сам элемент, т.е. в скольких контейнерах он бы не.
Нужно узнать имя и путь исполняемого файла, имея handle его окна
Нужно узнать имя и путь исполняемого файла, имея handle его окна. Когда используешь handle.
Перерисовка окна другого процесса через дескриптор этого окна
Приветствую всех. Может кто-то знает, как перерисовать окно другого процесса через дескриптор.
Обработка нажатия клавиши при фокусе другого окна
Здравствуйте. У меня есть приложение (А) и есть другое приложение (В), написанное на плюсах.
Источник