Консольное приложение: реакция на нажатие любой клавиши

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

K A A
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 11.04.2005 (Пн) 15:59

Консольное приложение: реакция на нажатие любой клавиши

Сообщение K A A » 11.04.2005 (Пн) 16:11

Подскажите, пожалуйста, как в консольном приложении обработать нажатие клавиши. Пробовал Console.Read, но она ждет нажатия Enter. Вроде элементарщина, а прямо не знаю что делать.
И еще вопросик. Есть консольное приложение, нужно запустить его из неконсольного, а в качестве консоли использовать элемент управления типа TextBox или что-то вроде этого. Как перенапраить ввод-вывод и сделать так, чтобы ввод был возможен не в любой части текста, а только в конце (т. е. сымитировать консоль)?
Заранее спасибо.

AyaAya
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 08.01.2005 (Сб) 18:54

Сообщение AyaAya » 11.04.2005 (Пн) 19:38

2 ответ - API функции AllocConsole, FreeConsole
а 1 - не знаю. =(

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 11.04.2005 (Пн) 19:47

Как перенапраить ввод-вывод

Код: Выделить всё
    Private SWInput As StreamWriter
    Private SWOutput As StreamReader
    Private SWError As StreamReader
    Private CmdProc As Process
    Private StartInfo As New ProcessStartInfo("cmd.exe")

        StartInfo.RedirectStandardInput = True
        StartInfo.RedirectStandardOutput = True
        StartInfo.RedirectStandardError = True
        StartInfo.UseShellExecute = False
        StartInfo.WorkingDirectory = "C:\"
        'StartInfo.CreateNoWindow = True 'не создавать окно

        CmdProc = Process.Start(StartInfo)
        'CmdProc.EnableRaisingEvents = True

        SWInput = CmdProc.StandardInput    'поток для записи (имитация клавиатуры)
        SWOutput = CmdProc.StandardOutput   'поток для чтения (имитация монитора)
        SWError = CmdProc.StandardError     'поток для чтения (тоже имитация монитора но для ошибок)


Не ждет нажатия Enter:
Код: Выделить всё
        Dim strOut As String
        Dim by() As Byte
        Dim i As Integer
        Dim ch(1000) As Char

        Do
            i = SWOutput.Read(ch, 0, 1000)
            by = Encoding.Default.GetBytes(ch, 0, i)

            strOut = Encoding.GetEncoding(866).GetString(by)
            RaiseEvent HasOutput(strOut)
        Loop


разбирайся на здоровье :D


Вернуться в Visual Basic .NET

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

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

    TopList