標準入力を使用しない呼び出しの場合、ProcessStartInfo の .WindowStyle を ProcessWindowStyle.Hidden とすれば、黒い画面(cmd.exe)が表示されなくなるのですが、標準入力にデータを与えようとすると、.UseShellExecute を False にしろと言われ、これを False にすると、黒い画面が復活してしまいます(汗
対策としては、.WindowStyle は忘れて、.CreateNoWindow を True に設定します。(NoWindow なので True で表示なしない。ややこしい…)
また、この場合、データを .write しても標準入力のストリームを開きっぱなしにしていると、.write したデータは呼び出しプロセスにわたらないようなので、忘れずにストリームを .close にします。
(以下のコード例だと、using を抜けるときに 結果的に .close はされるので、なくても動きますが…)
Dim psInfo = New System.Diagnostics.ProcessStartInfo With psInfo .FileName = "msg" .Arguments = "*" .RedirectStandardInput = True .UseShellExecute = False .CreateNoWindow = True End With Using ps = New System.Diagnostics.Process() ps.StartInfo = psInfo ps.Start() Using sw = ps.StandardInput sw.Write("ああああ" & vbCrLf & "いいいいい") .sw.Close() End Using ps.Close() End Using
ただ、msg コマンドで試した結果なので、ほかのコマンドだと挙動が違うかもしれません…