Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Дек. 11, 2016 08:01:59

SergeiIv
Зарегистрирован: 2016-12-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как добавить контрол на панел произвольного приложения?

Здравствуйте.
К примеру есть произвольное приложение. У него есть меню, есть, в верхней части, горизонтальная панель с кнопками. Есть ли возможность, и если есть то как добавить к уже существующим кнопкам свою кнопку с вызовом какой-нибудь функции в py файле. Использовать, скорее всего придётся win32api, желательно через pywinauto. Получить доступ к панели можно средствами swapy, либо Inspect Object (“C:\Program Files\Windows Kits\8.1\bin\x86\inspect.exe”).
Если кто знает как, покажите на примере того же notepad++, можно на своём примере.
Заранее спасибо )).

Офлайн

#2 Дек. 11, 2016 08:27:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 2789
Репутация: +  145  -
Профиль   Отправить e-mail  

Как добавить контрол на панел произвольного приложения?

Питон тут не поможет. Скачиваете исходный код notepad++ разбираетесь что там и как и добавляете свою кнопку. Потом собираете свою версию редактора. Многие программы позволяют добавлять пользовательские функции, пункты меню, плагины (в notepad++ есть плагины). Создать свой плагин это более простой путь. Смотрите документцию и делаете как там сказано.



Отредактировано doza_and (Дек. 11, 2016 08:28:32)

Офлайн

#3 Дек. 11, 2016 09:54:16

SergeiIv
Зарегистрирован: 2016-12-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как добавить контрол на панел произвольного приложения?

Дело не в notepade. notepad просто пример. Есть скомпилированное приложение, исходников нет. Я не нарушая лицензию использую обозначенные им формы ввода данных. Только данных много, и руками бить их в 21 век не хочется. Импорт не предусмотрен. Но есть win32, есть pywinauto. Перебор элементов формы уже разобрал, а вот добавить кнопку к панели для удобного использования не получается. Питон, конечно не поможет, но win32api, вроде, имеет возможность, а pywinauto python надстройка над win32api. Просто спросил, может кто знает способ.

Офлайн

#4 Дек. 11, 2016 12:26:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 2789
Репутация: +  145  -
Профиль   Отправить e-mail  

Как добавить контрол на панел произвольного приложения?

SergeiIv
Есть скомпилированное приложение, исходников нет. Импорт не предусмотрен
pywinauto - крайний случай. Я бы на вашем месте поискал другую программу если нет исходников и ясного способа автоматизации. Можно написать свою аналогично, и сделать исходники доступными.
На мой взгляд:
0. НЕ ИСПОЛЬЗУЙТЕ ПРОГРАММЫ БЕЗ ИСХОДНОГО КОДА!
1. Посмотреть доки. Может предусмотрено разработчиками автоматизировать ввод.
2. Попросить разработчика добавить нужный функционал.
3. Уже хак. часто данные в элементарном виде падают в файлы, базы данных и т.п. Можно туда данные запихать.
Не думаю что есть способ просто добавить кнопку в тулбар произвольному приложению. Это и имея исходники не просто сделать.



Отредактировано doza_and (Дек. 11, 2016 12:28:28)

Офлайн

#5 Дек. 11, 2016 14:27:42

SergeiIv
Зарегистрирован: 2016-12-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как добавить контрол на панел произвольного приложения?

“… Можно написать свою аналогично, и сделать исходники доступными…” не думаю, что легко самому состряпать прогу аналогичную, к примеру, 1С (в моём случае другая, но подобная и тоже российская).
“…0. НЕ ИСПОЛЬЗУЙТЕ ПРОГРАММЫ БЕЗ ИСХОДНОГО КОДА!…” - среди экономико - бухгалтерских программ они все без исходного кода (не считая Либру), включая российского производства, и не использовать их не получится.
“…1. Посмотреть доки. Может предусмотрено разработчиками автоматизировать ввод….” - уже, в данном случае не предусмотренно.
“…2. Попросить разработчика добавить нужный функционал…” - можно, но разработчик центральная крупная фирма и за даже небольшую фигульку просит крупную сумму, которая даже предприятию накладна.
“…3. Уже хак. часто данные в элементарном виде падают в файлы, базы данных и т.п. Можно туда данные запихать….” - есть доступ к БД на сервере, и что? при неизвестной структуре с сотнями таблиц не думаю, что это реально.
“..Это и имея исходники не просто сделать…” - имея исходники вполне даже легко, но обновления сведут к нулю усилия.
В моём случае я с помощью pywinauto вполне успешно автоматически запускаю программу, ввожу логин, пароль, в глубоко вложенном меню открываю форму и перебирая поля ввода завожу из excel данные в форму, нажимаю сохранить. Всё бы хорошо, но при множествах разных форм обращение к сторонним py файлам можно, но не очень удобно, да и просто не очень удобно. Как сказал Бендер “..Начать карьеру многоженца без дивного, серого в яблоках, костюма было невозможно..”, так и в моём случае панелька - костюм серый в яблоках ).

Офлайн

#6 Дек. 11, 2016 14:52:56

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 2789
Репутация: +  145  -
Профиль   Отправить e-mail  

Как добавить контрол на панел произвольного приложения?

SergeiIv
они все без исходного кода и не использовать их не получится

Это так кажется. Если у руководства жесткая позиция - не брать г… без исходного кода то его и не будет, аналоги всегда можно найти или заказать. но это не ваша компетенция наверное.
SergeiIv
и за даже небольшую фигульку просит крупную сумму
вот это как раз следствие непродуманной политики вашего руководства
.
SergeiIv
при неизвестной структуре с сотнями таблиц не думаю, что это реально.
В большинстве случаев даже очень реально. У нас были случаи когда не оказывалось исходников поскольку продукт продавливался на уровне правительства или концерна, вполне себе удачно “ломается” структура базы, иногда даже “ломаются” структуры пакетов сетевого обмена. Основная сложность обычно бывает когда у вас нет доступа к базе данных по административным причинам. Так что посмотрите какие таблицы и как меняются и пихайте данные аналогично. Данное решение обычно оказывается на порядок более производительным чем управлять менюшками.
SergeiIv
Всё бы хорошо, но при множествах разных форм обращение к сторонним py файлам можно, но не очень удобно, да и просто не очень удобно.
Похоже вам нужно gui приложение на питоне, которое будет менять перечень контролов путем мониторинга окон вашего главного приложения. Если вариантов не много, то может шоткаты завести?

Я вообще не считаю Python скрипты неудобными. Есть папка со скриптами. вам нужно alt-tab и выбор нужной команды. Что тут сложного? Если вы работаете в консоли или в far то у вас будет и автодополнение и история команд и возможность копипастить аргументы….

Конструктивный разговор будет если вы опишете свой технологический процесс.

Я скептически отношусь к pywinauto. Несколько раз пробовали им пользоваться. Всегда это кончается полуавтоматизацией, поскольку что-то не получается сделать.





Отредактировано doza_and (Дек. 11, 2016 14:57:49)

Офлайн

#7 Дек. 11, 2016 15:36:30

SergeiIv
Зарегистрирован: 2016-12-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как добавить контрол на панел произвольного приложения?

“…В большинстве случаев даже очень реально….” - ну в принципе всё возможно, всё дело в трудозатратах. Но в моём случае это проблемно. Ведутся логи, средства отката, промежуточные суммы, … изменяемые таблицы с данными найти можно конечно, но не зная всей кухни можно серьёзно навредить приложению с которым работает весь город. Потом сбэкапить можно, но введенные после точка бэкапа данные потеряются (и по шапке будет прилично ))).
“…Похоже вам нужно gui приложение на питоне..”- это запасной вариант. С панелькой лучше. Если сдамся потом червяк сточит. Вообще в этой панельке я могу обратиться к существующим кнопкам, кликнуть, скрыть. Даже саму панель переместить, даже убрать. Но так хочется свою кнопку или листбокс добавить чтобы все “языком цокнули” и не знаю как. Надеюсь на win32api, ведь с питона можно к любой функции win32 обратиться, почему бы и кнопку на панель не добавить. Хотя здесь мои знания заканчиваются.
“…Я скептически отношусь к pywinauto…” - ну если в ней какие то win32 не обёрнуты, можно самому добавить. Текущий вариант конечно наверное не идеален, хотя я не всю pywinauto знаю, может, и скорее всего, нужный функционал есть.

Офлайн

#8 Дек. 11, 2016 18:26:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 2789
Репутация: +  145  -
Профиль   Отправить e-mail  

Как добавить контрол на панел произвольного приложения?

SergeiIv
не зная всей кухни можно серьёзно навредить приложению с которым работает весь город
В этом вы безусловно правы… Можно уронить базу, так что хозяева не починят.
SergeiIv
ведь с питона можно к любой функции win32 обратиться
Да но в текущем приложении (т.е. в питоне). А вы хотите в чужом приложении ковыряться. Туда можно максимум сообщения посылать.
Вот вам пример, но я бы не взялся в сторонней программе добавлять поля.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/hh298365(v=vs.85).aspx

А вообще вы напишите какой программой хотите управлять, может тут есть спецы которые с ней имели дело.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version