Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать bat файлу события нажатия клавиш? 
V
    Опции темы
Aprol
Дата 27.1.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



http://forum.vingrad.ru/faq/topic-157976.html
по ссылке описывается как получить поток от батника, а обратного пути не описанно.
Чтобы передать нажатие клавиши запущенному батнику попробовал переделать пример, но не получается. помогите.
Код

import java.io.*;

public class Primer {
    public static void main(String[] args) {
        try {
            Process proc = Runtime.getRuntime().exec("D:/2.bat");
            Streamer out_stream = new Streamer(proc.getInputStream());
            Streamer2 stream=new Streamer2(proc.getOutputStream());
            
            out_stream.run();
            stream.run();
        } catch (IOException e) {
            e.printStackTrace();  
        }
    }
}
class Streamer extends Thread {
    private InputStream input;

    public Streamer(InputStream in) {
        input = in;
    }

    public void run() {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            String line = null;

            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}
class Streamer2 extends Thread {
    private OutputStream output;

    public Streamer2(OutputStream out) {
        output = out;
    }

    public void run() {
        try {
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
            
[size=8]               writer.newLine();
               writer.write("13");[/size]

        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}


сам батник простенький
Код

ver
pause
ver

PM MAIL   Вверх
ivg
Дата 27.1.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Код

         ....
10:            out_stream.start();
11:            stream.start();
         ....
50:            writer.flush();
         ....

PM MAIL   Вверх
math64
Дата 27.1.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Код

Process proc = Runtime.getRuntime().exec("D:/2.bat");
Writer writer = new OutputstreamWriter(proc.getOutputStream());
writer.write("\r\n");
writer.flush();

PM   Вверх
Aprol
Дата 27.1.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Цитата(math64 @  27.1.2009,  13:31 Найти цитируемый пост)
writer.write("\r\n");

Что это за строка поясните.

Добавлено через 1 минуту и 46 секунд
Цитата(ivg @  27.1.2009,  13:26 Найти цитируемый пост)
10:            out_stream.start();
11:            stream.start();
         ....
50:            writer.flush();
         ....

к сожалению не работает
PM MAIL   Вверх
ivg
Дата 27.1.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Цитата(Aprol @  27.1.2009,  16:02 Найти цитируемый пост)
к сожалению не работает 

А как не работает? Совсем или чуть-чуть? Я надеюсь вы поняли, что это исправления к вашему коду. К слову у меня работает. Попробую догадаться и предложить ещё одно:
Код

6:            Process proc = Runtime.getRuntime().exec("cmd.exe /C D:/2.bat");

PM MAIL   Вверх
math64
Дата 27.1.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Можно так:
Код

Process proc = Runtime.getRuntime().exec("D:/2.bat");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
writer.newLine();
writer.flush();
writer.close();
reader.close();

"\r\n" - строка которую выведет newLine() в Windows, возможно достаточно будет передать "\r".
При необходимости можно создать потоки, как было сделано у тебя, с поправками ivg

Добавлено через 3 минуты и 44 секунды
Возможно, нужно писать "D:\\2.bat"
PM   Вверх
Aprol
Дата 28.1.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Цитата(ivg @  27.1.2009,  14:24 Найти цитируемый пост)
Я надеюсь вы поняли, что это исправления к вашему коду

Конечно понял. Получаю поток только от батника, но отправить нажатие не  получается.
То есть у вас срабатывает такой батник и в консоле получаете две записи с версией винды?

PM MAIL   Вверх
Aprol
Дата 28.1.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Извините, много проблем от невнимательности.
Код:
Код

           out_stream.run();
           stream.run();

не поменял на 
Код

           out_stream.start();
           stream.start();

Теперь запускается.
Другие примеры обязательно попробую тоже.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.