Пакетное перенаправление файлов - PullRequest
0 голосов
/ 15 апреля 2009

У меня есть пакетный файл, который вызывает мою IDE, поэтому я просто хочу знать, можем ли мы извлечь содержимое, присутствующее в моей IDE (все содержимое), в некоторые текстовые файлы.

Мой пакетный файл написан ниже

D:\WindRiver\wrenv.exe -p vxworks653-2.2.3 run
PAUSE

Нужно ли добавить какой-либо код в мой существующий пакетный файл ??

Ответы [ 4 ]

1 голос
/ 15 апреля 2009

Я не уверен, что вы думаете, " извлеките содержимое, присутствующее в моей IDE ", но обычно такая проблема решается с помощью инструментов автоматизации. Такие инструменты могут захватывать в среде Windows все, что угодно, от имен окон, заголовков кнопок, текстового содержимого ... всего, что вам может потребоваться от стороннего приложения (даже изображения элементов графического интерфейса)

Я предлагаю вам взглянуть на AutoHotKey , язык сценариев ~ 200 КБ для автоматизации Windows.

Как правило, вы не можете сделать это в пакетном режиме.

Получение содержимого окна в AutoHotKey может быть простым:

 WinGetText, text, "name of the window"
 FileAppend, %text%, c:\out.txt

Это может быть немного сложнее, но ничего, что вам может понадобиться, не включает в себя более 10 строк сценариев AHK.

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

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

На форуме сообщества есть много полезных функций и библиотек для практически всего, что вам может понадобиться для получения информации - перенаправление stdin / out в ваш файл, модуль COM Accesibilty (системный способ автоматизации вещей в windows), даже некоторые ocr-оболочки для сканирования информации, изображенной на изображениях.

0 голосов
/ 17 апреля 2009

>>> привет, я только что попробовал с AutoHotKey ....

Нет, это не правильно.

Правильный код можно сделать только при наличии установки WindRiver, которой у меня нет. Хорошо, позвольте мне объяснить это в ближайшее время.

Сначала я предположу, что название IDE начинается со слова "WindRiver". WindRiver должен содержать текст в каком-то стандартном элементе управления окном, где-то в иерархии элементов управления. Тип элемента управления, о котором идет речь, определяет, как вы можете извлечь из него текст. Если это, например, ListView или ListBox, вы должны использовать

ControlGet, outputVar, List,, SysListView321, WindRiver

Приведенный выше код означает «получить мне текст первого элемента управления SysListView32 (следовательно, 1 в конце) из приложения, заголовок которого начинается с« WindRiver », и поместить его в переменную ouputVar»

Если он остается в окне редактирования, вы можете просто сделать:

ControlGetText, OutputVar, Edit1, WindRiver

Это означает «получить мне содержимое первого элемента управления« Редактировать »внутри приложения с названием WindRiver»

Чтобы узнать тип и номер элемента управления, просто откройте Window Spy (щелкните правой кнопкой мыши значок AHK на панели задач) и наведите курсор мыши на элемент управления, чтобы увидеть его детали.

Все сценарии будут выглядеть так:

Run, d:\WIndriver ....
WinWaitActive, WindRiver
ControlGetText, OutputVar, Edit1, WindRiver
MsgBox %OtputVar%  

Если заголовок окна постоянно меняется, вам придется использовать класс окна instad title для идентификации окна. Например, вы можете настроить таргетинг на блокнот как

ControlGetText, o, Edit1, Untitled 

или

COntrolGetText, o, Edit1, ahk_class Notepad

Первый метод использует заголовок окна, второй - класс приложения Window API, который лучше, поскольку заголовок может меняться.

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

Чтобы увидеть, насколько мощный AHK и какие удивительные вещи можно сделать в нем, посмотрите модуль Док .

Невозможно сделать это в пакетном режиме и с помощью перенаправления std, поэтому вам лучше привыкнуть к AHK или к аналогичному языку atuomation (AutoIt, Phantom, WinRunner ....). Кстати, на этот тип вопросов обычно отвечают в течение нескольких часов на форуме сообщества AHK Ask For Help.

0 голосов
/ 15 апреля 2009

Извините за поздний ответ. Это фактическая IDE (D: \ WindRiver \ wrenv.exe -p vxworks653-2.2.3), когда я помещаю его в командную строку, вызывается моя IDE. для уточнения

Спасибо Стефен

0 голосов
/ 15 апреля 2009

Я задал аналогичный вопрос , который может быть полезен. Такой подход, скорее всего, будет работать, только если ваша IDE выводит информацию в stdout / stderr и т. Д.

У меня был некоторый (ограниченный) успех с подключением к уже запущенным процессам, чтобы попытаться перехватить данные, которые они выводят.

В частности, что вы пытаетесь захватить? Выход из одного из его окон? Сообщения об ошибках, если он не запускается?

[Редактировать] Я все еще не уверен, что именно вы пытаетесь захватить, но похоже, что вы можете запустить скрипт Python из своего пакетного файла. Сценарий запускает вашу среду IDE и захватывает stdout и stderr, которые выдадут как обычные выходные данные , так и любые ошибки.

...