C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: コンソールアプリへのキー入力


(過去ログ 131 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■77670 / inTopicNo.1)  コンソールアプリへのキー入力
  
□投稿者/ むむ (1回)-(2015/11/15(Sun) 12:24:20)

分類:[C#] 

VisualStudio2015 C# Win7 32bit

お世話になります。

「DOSコマンドを実行し出力データを取得する」
http://dobon.net/vb/dotnet/process/standardoutput.html

上記を参考に、コンソールアプリを画面に出力するツールを作成しておりますが
batファイル中の「pause」命令の対応に困っています。

例)test.bat
ping localhost
pause
ping localhost
pause
ping localhost
pause

上記をコンソールで実行するとpause部分で停止するので、Enterキーを都度
入力して進めることができるのですが。

//入力のストリームを取得
System.IO.StreamWriter sw = m_BatProcess.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine(Keys.Enter);
}
sw.Close();

サイトのサンプルをもとに上記のようにすると、1回しか実行していないのに2回目や3回目
のPauseも素通りしてしまいます。
キーボードでのEnter入力時と同じように、都度入力するようにするにはどうすればよろしいでしょうか。


よろしくお願いしますm(__)m。

引用返信 編集キー/
■77671 / inTopicNo.2)  Re[1]: コンソールアプリへのキー入力
□投稿者/ Hongliang (367回)-(2015/11/15(Sun) 12:39:48)
> sw.WriteLine(Keys.Enter);
StreamWriter::WriteLineで列挙体を渡した場合、その列挙体の文字列表現が出力されます。
つまり、この場合 Enter という文字列が出力されます。
さらにWriteLineは末尾に改行、つまり \r 文字と \n 文字の2文字が出力されます。
合計7文字分入力され、pauseコマンド7回分の入力になります。

pauseを一つ進めるには、適当な1文字をWriteしてください。

> sw.Close();
StandardInputをCloseしたら、それ以上入力を行わないことになります。
入力されないので、pauseもわざわざ入力を待たなくなります。
必要な入力が終わるまでCloseしてはいけません。
引用返信 編集キー/
■77673 / inTopicNo.3)  Re[2]: コンソールアプリへのキー入力
□投稿者/ むむ (2回)-(2015/11/15(Sun) 13:28:46)
Hongliang 様
お世話になります。

> StandardInputをCloseしたら、それ以上入力を行わないことになります。
> 必要な入力が終わるまでCloseしてはいけません。
なるほど、で都度作成、都度クローズしていたのがNGだったのですね。


> pauseを一つ進めるには、適当な1文字をWriteしてください。

sw.Write(Keys.A) とすると確かに期待通りの動きなのですが、
sw.Write(Keys.Enter) とするとやはり2回目以降が素通りになります。

ここでこまったことが・・・

batではpauseの待ち合わせの場合と

 set /P USR_INPUT_STR="1:実行 2:停止 (未入力時は1) : "

で選択させるケースが有ります。
Enterキーのみを押した場合は'1'が選択されたことになるようにbat内で処理されています。


そのため、コンソールにもEnterキーを送りたいのですが、
sw.Write(Keys.Enter) では、以降のPauseが流れてしまうという問題につながります。

この部分に関して、なにかよい方法はないでしょうか。
※前提:batファイル側の変更は行わない。

よろしくお願いします。




引用返信 編集キー/
■77674 / inTopicNo.4)  Re[3]: コンソールアプリへのキー入力
□投稿者/ むむ (3回)-(2015/11/15(Sun) 15:56:44)
自己解決しました。
sw.Write('\r');
上記でEnterキー相当となりました。


で、別の問題が発生したのでスレを変えて質問します。
本件、ありがとうございました m(__)m
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -