проблема перенаправления консоли после прохождения команды - PullRequest
0 голосов
/ 06 ноября 2019

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

Я пытался:

Console.SetIn(New IO.StreamReader(Console.OpenStandardInput))

... после генерации списка, чтобы восстановить контроль, но безрезультатно.

Я также пытался сохранить консоль.in состояние и восстановление его после генерации списка, но снова не удалось.

:: код

sub main()

  Dim lista As New List(Of String)
        Do
            Dim line = Console.ReadLine()
            Select Case line
                Case vbNullString
                    Exit Do
                Case Else
                    lista.Add(line)
            End Select
        Loop

        For Each linea As String In lista
            Console.WriteLine(linea)
        Next

        Console.ReadKey()
end sub ()

Давайте предположим, что мы скомпилировали код в program.exe и выполнили следующее:

dir /b | program.exe

все выполняется нормально, пока console.readkey (), где ошибка, которую он бросает, не является:

System.InvalidOperationException: консоль перенаправлена ​​из файла

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

Мой вопрос: как мне восстановить контроль над перенаправленной консолью. Так я могу читатьклавиши ввода, чтобы сделатьвыбор?

1 Ответ

0 голосов
/ 06 ноября 2019

Хорошо, я нашел решение !!!!!!!

Определите эти вызовы Win32 API:

Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function AttachConsole Lib "kernel32" (ByVal consoleid As Long) As Long

И где вы хотите восстановить контроль над консолью, добавьте следующее:

  FreeConsole() ' free current attached console
  AttachConsole(-1) ' regain control of parent console

И все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...