.NET: Injetar dados no buffer de entrada do processo

Eu preciso automatizar um aplicativo de linha de comando. Ele pede ao usuário para digitar uma senha. Todos os meus approches para enviar a senha via STDIN falharam. Agora estou tentando fazer isso com um wrapper-programm usando o .NET.

Estou iniciando o aplicativo criando um novo processo, definindo oStartInfo-properties e, em seguida, inicie o processo:

Dim app_path As String
Dim app_args As String
Dim myProcess As Process = New Process()
myProcess.StartInfo.FileName = app_path
myProcess.StartInfo.Arguments = app_args
myProcess.StartInfo.UseShellExecute = False
myProcess.Start()

Eu tentei usar oStartInfo.RedirectStandardInput Propriedade, mas sem sucesso.

Agora eu vim através doWriteConsoleInput função dokernel32.dll que eu incluí assim:

Declare Function WriteConsoleInput Lib "kernel32.dll" Alias "WriteConsoleInputA" (ByVal hConsoleInput As Integer, ByVal lpBuffer As String, ByVal nNumberOfCharsToWrite As Integer, ByRef lpNumberOfCharsWritten As Integer) As Boolean

Eu posso pegar a alça do processo através domyProcess.Handle propriedade. Mas o envio de entrada para o buffer de entrada usando esse caminho também não era possível.

Eu encontrei essas perguntas, mas elas não ajudaram:

Como escrevo "PAGE DOWN" no buffer de entrada do console? (1475353)

Java - passando entrada para aplicação C / C ++ externa (1421273)

Controlando um aplicativo do console do Windows com stdin pipe (723424)

Usando o StraceNtX.exe, obtive esta saída no momento em que o aplicativo está aguardando a entrada:

[T4024] GetConsoleMode(f, 12d35c, 12d3af, 77bff894, ...) = 1
[T4024] SetConsoleMode(f, 0, 12d3af, 77bff894, ...) = 1
[T4024] ReadConsoleInputA(f, 12d348, 1, 12d360, ...) = 1

Alguém pode me dizer, o que mais para tentar ou como fazer o caminho acima? Obrigado!

Com base na resposta de Tim Robinsons Eu tenho esse código agora, mas não funciona:

myProcess = New Process()
myProcess.StartInfo.FileName = app_path
myProcess.StartInfo.Arguments = app_args
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal
myProcess.StartInfo.UseShellExecute = False
myProcess.Start()
' Wait for process requesting passwort input
System.Threading.Thread.Sleep(3000)
Dim len As Integer
len = 0
Dim handle As Integer
handle = GetStdHandle(STD_INPUT_HANDLE)
WriteConsoleInput(handle, "Test", 4, len)

Meu programa é um aplicativo de linha de comando que deve atuar como um wrapper.

A entrada é enviada, mas de uma forma que não é digitada no campo de senha, mas abaixo do campo de senha, uma nova promt é mostrada (sem mostrar a entrada).

Tim, você pode me dar um exemplo?

questionAnswers(2)

yourAnswerToTheQuestion