Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2011, 23:15   #1
Zuban
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 12
По умолчанию Перехват данных или эмуляция действий пользователя?

Кратко смысл задачи, поставленной передо мной таков.
На работе наш отдел обслуживает несколько удаленных телефонных станций. Работа осуществляется через программу-терминал. Один из высших начальников приказал отсылать ему все данные о телефонных соединениях, сделанных с его номера. Специальной функции в софте АТС для этого нет, мы с теминала запускаем диагностическую программу, которая завершает свою работу через 15 мин после крайнего события. Соответственно, дежурный скачет козликом, чтобы постоянно запускать диагностику и копировать с экрана данные в файл отчета. Есть желание как-то автоматизировать этот процесс.
Мысли пока такие:
1. Сделать прогу, которая будет сканировать нужный порт и сразу записывать перехваченные данные в лог. Сложность в том, чтобы расшифровать данные, поскольку передаются они бинарном виде. Если бы это удалось, то также можно было бы отправлять команду перезапуска диагностики
2. Просто эмулировать действия пользователя, подменить ввод с клавы вводом из моей программы. Но как, подскажите?
Zuban вне форума Ответить с цитированием
Старый 12.01.2011, 10:04   #2
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

>>которая завершает свою работу через 15 мин после крайнего события
сделать чтобы не завершалась

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

а вообще программу смотреть надо, я скажу, да и хоть бы сказали ОС под которой это все работает
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 12.01.2011, 11:44   #3
Zuban
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 12
По умолчанию

На клиентских машинах ХР, а ОС сервера (АТС) - Линукс.

Цитата:
то что выползает на экран с помощью какой либо программы запросто можно копировать и сохранять в файл без всяких скачущих козликами дежурных
Честно говоря, не знаю, какой раздел виндового хелпа изучать. А еще одна хитрость в том, что текст в терминале не прокручивается, и новые строки "пропадают". Чтобы их увидеть, нужно перелистнуть страницу. Понятно, что это как раз несложно реализовать, но, как я уже говорил, я не знаю как подступиться к считыванию текста.
Zuban вне форума Ответить с цитированием
Старый 12.01.2011, 13:45   #4
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

насколько я понимаю программа-клиент, которая работает под винду выдает нужную вам информацию, но завершает работу после 15ти минут бездействия. Все так? программа консольная или нет?
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 12.01.2011, 16:22   #5
Zuban
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 12
По умолчанию

Да, все именно так. Программа неконсольная, хотя в ней имеется псевдо-консоль. Вот как выглядит окно программы
Изображения
Тип файла: jpg screen.JPG (104.0 Кб, 136 просмотров)
Zuban вне форума Ответить с цитированием
Старый 12.01.2011, 16:38   #6
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

насколько понимаю нужная инфа в окошке с именем вверху LIST TRACE, думаю можно просто написать для этой программки длл, которая будет инжектиться в процесс программы, сабклассить данный контрл с текстом и пропускать все данные через свою процедуру, в которой можно сохранять в файл, можно не сохранять в файл, вообщем вся информация программно уже будет в руках
насчет 15ти минут это надо либо смотреть саму программу, потому что непонятно от чего она отсчет ведет от какого именно сообщение итп.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 12.01.2011, 17:17   #7
Zuban
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от yuran666666 Посмотреть сообщение
насколько понимаю нужная инфа в окошке с именем вверху LIST TRACE, думаю можно просто написать для этой программки длл, которая будет инжектиться в процесс программы, сабклассить данный контрл с текстом и пропускать все данные через свою процедуру, в которой можно сохранять в файл, можно не сохранять в файл, вообщем вся информация программно уже будет в руках
насчет 15ти минут это надо либо смотреть саму программу, потому что непонятно от чего она отсчет ведет от какого именно сообщение итп.
Да, нужен именно List Trace.
Я не очень владею программистским жаргоном (инжектить, сабклассить и т.д.), поскольку никогда не общался другими с программистами, так жизнь сложилась. Нельзя ли теперь перевести эту терминологию.

Если говорить простым языком, решение я вижу такое:
  1. Определить дескриптор основного окна программы и его класс
  2. Аналогично поступить с дочерними окнами
  3. Дальше я в тупике

Так что, если несложно, можно поподробнее про "инжектить" и "сабклассить".
Zuban вне форума Ответить с цитированием
Старый 12.01.2011, 17:53   #8
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Да все просто. Инжектить это подгружать в адресное пространство процесса. Обычно имеется ввиду длл библиотека. Тут думаю можно будет запросто прописать ее статически в таблице импорта программы, если программа не проверяет целостнось своего ексе файла. Сабклассинг. У оконных программ есть так называемый основной цикл приема сообщений окну, для него создается процедура, которая имеет свой адрес в пространстве процесса. Смысл сабклассинга изменить этот адрес(из длл это и произойдет) чтобы сначала сообщения шли в нашу процедуру с возможностью их анализа и обработки, а затем если данные не нужны можно в том же виде отправлять их в основной оконный цикл, а можно вообще ничего не отправлять основному циклу. Вкратце примерно так. Почитайте про сабклассинг-статей очень много
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 12.01.2011, 18:13   #9
Zuban
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 12
По умолчанию

Спасибо, уже читаю
Zuban вне форума Ответить с цитированием
Старый 12.01.2011, 20:35   #10
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Наверное легче всего будет так:
пишем exe программу-лоадер(не особо кошерно конечно, ну да ладно), лоадер запускает цикл поиска окна программы - окна нет стало быть запускаем исследуемую программу-терминал, делаем задержку чтобы не запускалось по стопиццот раз одно и то же приложение, повторяем цикл, находим нужное окно, находим идентификатор потока в котором крутится оконный цикл, устанавливаем хук на этот цикл(с помощью длл), у каждого контрола есть свой ID, который легко ищется с помощью разных программ типа WinSpy, ждем когда будут идти сообщения нужному контролу, анализируем информацию, нужную - сохраняем.
И все вроде должно бы получится
единственное что нужно прочесть это про виндовые хуки
можно здесь: http://www.wasm.ru/article.php?article=1001024
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция действий мыши в свернутом окне senia Win Api 12 18.11.2010 16:38
Перехват POST передачу данных Verst Общие вопросы Delphi 4 24.11.2009 15:34
Перехват данных с формы brato4karik Win Api 8 20.11.2009 13:38
создание учётной записи пользователя в системе с случайными параметрами (имя, пароль). js или vbs samCS JavaScript, Ajax 1 22.12.2008 19:36
Перехват данных Socol Работа с сетью в Delphi 1 19.02.2007 13:47