C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[3]: コンソールアプリへのキー入力
(過去ログ 131 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 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
-