2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4  След.
 
 Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 22:37 


02/04/13
289
Необходимо написать программу, которая бы заменяла оператора некоторого приложения буквально, то есть программа должна, считывая информацию с монитора, управлять клавиатурой и мышкой и производить какие-то действия.
Подробнее. Оператор подключается к серверу по RDP и работает в интерфейсе 1С:Предприятие. Работа достаточно однотипная и может быть запрограммирована. Программа должна считывать картинку интерфейса приложения, распознавать текст в разных полях, и, исходя из распознанной информации, управляя устройствами ввода, производить определенную последовательность действий. То есть, если смотреть только на монитор, то должно быть не понятно, что в приложении работает не человек, а программа.
На мой взгляд тут 2 принципиальных момента: 1) считывание информации с монитора и ее распознавание и 2) программирование последовательности операций мышки и клавиатуры.

А теперь вопрос. На каком языке программирования лучше всего реализовать данную задачу? Python, Java, C++ или что-то другое? И еще просьба поделиться ссылками на материалы (лекции, видео, темы форума) с данной тематикой. Спасибо!

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 22:45 
Заслуженный участник


02/08/11
6874
Лучше всего и проще это делается с помощью специальных средств, таких как AutoIt.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 22:56 


02/04/13
289
warlock66613, спасибо за ответ, обязательно попробую AutoIt. Но все-таки хотелось бы реализовать данную задачу средствами какого-нибудь популярного языка программирования. Просто я давно хотел потренироваться в программировании и было бы классно, если вдруг оказалась, что данная задача хорошо решается средствами, например, Java, C/C++ или Python. Хочется, чтобы меня направили в нужном направлении.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 23:03 
Заслуженный участник


27/04/09
28128
Тут язык общего этого самого вам сильно не поможет, потому что вам придётся сильно пользоваться функциями операционной системы (видимо, WinAPI), разве что может навредить, если их трудно из него использовать.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 23:07 


02/04/13
289
arseniiv, понял. Ну, тогда остается конкретный вопрос относительно Java, C/C++ и Python. Что из этого предпочтительней для данной задачи и вообще решаема ли она адекватно средствами Java, C/C++ и Python?

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 23:17 
Заслуженный участник


26/05/14
981
Самое сложное это понять что отображено на экране, куда вводить данные и какие кнопки нажимать. Если предположить что доступно только изображение экрана, то задача очень сложна - как минимум, вам нужно распознавание текста. Ищите инструментария для распознавания, язык надо будет выбрать после того как вы выберете инструментарий. Трудоёмкость от недели до месяца.

Если есть доступ к структурам GUI (элементы окна - поля ввода текста, поля меток, кнопки), то C++ - ваш выбор, так как вам понадобится прямой доступ к Win API. Трудоёмкость от месяца до года. Python тоже подходит, если вы найдёте подходящую библиотеку для доступа к Win API в области GUI.

Или ищите средства автоматизации управления GUI (AutoIt - хороший пример). Ещё посмотрите в сторону "Windows GUI automated testing tools". Тестировщики интерфейсов используют этот инструментария очень широко - выбор у вас будет. Язык будет определён инструментом. Трудоёмкость от недели до месяца.

Я голосую за последний вариант. Скорее всего вы легко найдёте софт, который на 90% покроет ваши потребности.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 23:18 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Эта задача решается не средствами языков программирования, а средствами API функций Windows (если у вас под виндовсом программа запускается). А уже с помощью API вы можете изучать содержимое окна, получать текст из полей для ввода (сразу текстом, а не картинкой), перехватывать события клавиатуры и мыши, генерировать свои и т. д. Правда, одна проблема есть: антивирусы очень не любят программы, которые непонятно зачем дергают API. Так что вы аккуратнее там.
А уж откуда вы будете API дергать - дело десятое.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 23:26 


02/04/13
289
slavav, rockclimber, доступно только изображение экрана. Никакого доступа к окнам и тем более их содержимому нет и быть не может (оператор подключается по RDP). Только содержимое монитора. Распознавать необходимо только текст в определенных полях определенных окон, вызываемых кликом мышки. Как я понимаю, должен же быть какой-то штатный инструментарий распознавания текста с монитора...

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение23.10.2016, 23:56 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
melnikoff в сообщении #1162385 писал(а):
Никакого доступа к окнам и тем более их содержимому нет и быть не может (оператор подключается по RDP).
Да, пропустил этот момент. Ну что тут сказать? Если проблема в том, что
melnikoff в сообщении #1162378 писал(а):
я давно хотел потренироваться в программировании
найдите задачу на "потренироваться" попроще.
Вам ведь кроме распознавания текста понадобится еще как-то определять, в каком месте этот текст, где границы кнопок и полей для ввода, где данные, а где подписи к ним и т. д. Задача не тренировочного уровня.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение24.10.2016, 00:03 


02/04/13
289
rockclimber в сообщении #1162395 писал(а):
найдите задачу на "потренироваться" попроще.

Дело не только в тренировке. Это реальная задача, которая требует решения. Поэтому отступать нельзя. Для начала мне нужно определиться куда копать... Как я понимаю, вышеупомянутый AutoIt не подойдет.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение24.10.2016, 00:09 
Заслуженный участник


27/04/09
28128
Частично упростить распознавание может помочь знание о том, какие окна бывают у запускаемых программ (например, если какое-то окно всегда одного и того же размера, определить, что это оно на экране, и где в нём что, проще, чем если оно может быть разного, и его элементы переезжать туда-сюда) и что вы не контролируете (могут быть открыты разные другие окна, значки на рабочем столе могут менять положение (хотя на них лучше сразу не надеяться, а вызывать команду с помощью, скажем, окна Выполнить, вызываемого по Win-R, но это просто пример)), и как делать «сброс», когда ситуация вышла из-под контроля (представьте себе, что вы или кто-то ещё понажимали кнопок на пульте телевизора, в котором не разбираетесь, и вам надо вернуться к какой-то точке, с которой вы умеете начинать (обычно есть кнопка return, а здесь часто может помочь Esc или Alt-X)).

-- Пн окт 24, 2016 02:10:04 --

P. S. Соболезную.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение24.10.2016, 00:20 


02/04/13
289
arseniiv в сообщении #1162407 писал(а):
Частично упростить распознавание может помочь знание о том, какие окна бывают у запускаемых программ (например, если какое-то окно всегда одного и того же размера, определить, что это оно на экране, и где в нём что, проще, чем если оно может быть разного, и его элементы переезжать туда-сюда)

Тоже думал об этом, но к счастью при открывании окон они всегда раскрываются неизменных размеров в неизменном положении относительно других элементов интерфейса.

arseniiv в сообщении #1162407 писал(а):
и как делать «сброс», когда ситуация вышла из-под контроля (представьте себе, что вы или кто-то ещё понажимали кнопок на пульте телевизора, в котором не разбираетесь, и вам надо вернуться к какой-то точке, с которой вы умеете начинать (обычно есть кнопка return, а здесь часто может помочь Esc или Alt-X)).

В данном случае программ просто останавливается и сигнализирует об этом. Тут все понятно.
Основная загвоздка – это определиться инструментом распознавания текста с монитора...

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение24.10.2016, 00:20 
Заслуженный участник


02/08/11
6874
melnikoff в сообщении #1162401 писал(а):
Как я понимаю, вышеупомянутый AutoIt не подойдет.
Он как раз отлично подойдёт. Функция PixelSearch — ваше всё.

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение24.10.2016, 00:21 
Заслуженный участник


27/04/09
28128
melnikoff
Тут я уже не Копенгаген, написал, что пришло в голову. :-)

 Профиль  
                  
 
 Re: Выбор языка программирования для конкретной задачи.
Сообщение24.10.2016, 00:23 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Если у вас есть какой-то более-менее заданный рабочий процесс (например, "запустить программу, нажать кнопку Х, откроется окно Y, в поле для ввода ввести Z, нажать ОК"), то можно просто сымитировать последовательность действий пользователя (это как раз можно сделать API функциями на рабочей машине), а контроль действий определять не путем распознавания текста, а просто по контрольным точкам на экране. Например, вы ввели в поле для ввода отрицательное число, а можно вводить только положительные. Рядом с полем для ввода появилась надпись об ошибке красными буквами, а в случае правильного ввода там был бы просто серый фон. Вы берете область и анализируете - появились ли в пределах определенного прямоугольника красные пиксели. Вот как-то так.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу 1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group