Обнаружение графического интерфейса после вызова Runtime.exec () - PullRequest
3 голосов
/ 13 декабря 2011

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

Есть ли способ обнаружить, если запущенная программа породила диалоговые окна или какой-либо другой графический интерфейс? Это решение сделано в Windows, и исполняемая программа является exe.

Ответы [ 3 ]

1 голос
/ 14 декабря 2011

Вы можете использовать этот фрагмент JNA для опроса окон, запущенных вашим процессом.

AFAIK, вы можете получать только стандартные и выходные сообщения об ошибках из процесса, используя Java Process API.

1 голос
/ 13 декабря 2011

Если устаревшая система сообщает об ошибках в консоли, возможно, получите ваши ошибки.
Просто возьмите поток ошибок и прочитайте.

Как это:

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
// any error message?
InputStream error = proc.getErrorStream(); 
InputStreamReader isr = new InputStreamReader(error);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
      System.out.println(" ERROR >" + line); 

Рекомендую прочитать: Причуды Runtime.exec ()

Надеюсь, эта помощь.

0 голосов
/ 14 декабря 2011

Итак, я решил использовать код фрагмента, с которым связался @Gerrett Hall. Этот фрагмент кода проверяет активное окно перед тем, как запустить команду и сохранить имя.

Затем, после того, как команда не вернула команду, проверьте, изменилось ли активное окно. если это так, завершите процесс (Alt. отправьте глобальный ключ возврата).

Чтобы получить информацию из диалога, я мог бы использовать Ctrl + C, чтобы скопировать содержимое диалога и прочитать буфер вставки, чтобы скопировать сообщение в журнал. Еще не разобрался в этой части.

И да, это отвратительный взлом, но такова и унаследованная система.

...