gigigi
@gigigi

Python. Лучший способ кроссплатформенного взаимодействия с окнами ОС

Здравствуйте.
Пишу небольшую полезную штуку на питоне, но столкнулся с проблемами работы с окнами.
Моя задача — получить все заголовки открытых окон.
Очень хочется, чтобы под любой ОС не приходилось ставить ничего, кроме самого питона. Запустил — и работает.
Т.к. изначально планировалось что скрипт должен работать под windows, с неё я и начал. Попробовал разные способы, остановился на ctypes.

Всё было хорошо, но после этого я решил запустить свой скрипт на другом компьютере, с Ubuntu, и такая конструкция естественно не заработала.
Я нашёл ещё один способ — gtk)
Под линуксом всё замечательно, но под всеми остальными ОС (у меня была надежда на Mac OS) опять же не работает.

Есть конечно вариант написать под каждую ОС свой способ, но это как-то не правильно наверное.
Поэтому я решил спросить, возможно есть какие-то стандартные кросплатформенные способы получить заголовки всех окон?
Заранее спасибо :) извините если спрашиваю ерунду, конкретно в питоне я новичок.
  • Вопрос задан
  • 5014 просмотров
Пригласить эксперта
Ответы на вопрос 2
ks_ks
@ks_ks
О да, хорошая задача — взаимодействие с GUI, но гемор ещё тот, в особенности если нужно добиться чего-то по-серьезнее получение заголовков окна. :)

Проблема в том, что в каждой ОС своя система графического взаимодействия с пользователем (в windows за это отвечает вроде бы Windows api, в nix* — это X windows) и универсального решения быть не может в принципе.

Попробуйте копнуть в "os HWND" — для винды оно д.быть легко получаемо через либу pywinauto, или win32api. Для nix* не помню. В любом случае, если это низкоуровневое взаимодействие, и не хочется использовать сторонние либы, то последовательность вижу следующей: сначала проверяем наличие конкретных либ, потом пробуем использовать из питона их методы, предварительно разобравшись с тем, как пишутся обёртки.
Ответ написан
Комментировать
BubaVV
@BubaVV
Судя по всему, придется детектить ОС и/или оконный менеджер и использовать специфичные для каждого случая функции
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы