2011-08-07 7 views
19

私は本質的にConsole.ReadLine() - Loopであるコンソールアプリケーションを作成しました。アプリケーションが入力を待っているときに、上矢印キーを押すと、前のすべての入力行が繰り返されます。私のアプリケーションにはこの機能のコードは含まれていません。 Windowsのどの部分がこれを提供していますか?どうすれば無効にできますか?コンソールアプリケーションにコマンド履歴があるのはなぜですか?

コンソールサブシステムの機能であるか、Console.ReadLine()で実装されているかだけをイメージできます。ここで

を説明挙動を示すいくつかのサンプルコードです:

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string input; 
      do 
      { 
       input = System.Console.ReadLine(); 
      } while (input != "exit"); 
     } 
    } 
} 

私は今の履歴機能を無効にしたい、と私自身のコードを使用して、後でそれを再実装します。現在の行動はあまりにも限定されている。

+0

私が見つけた唯一の事はこれです - http://www.clearallhistory.com/clear-run-history.html。理想的な解決策ではありませんが、おそらく入力を求める前に履歴を消去することができます。副作用は、マシン上で開くコマンドプロンプトの履歴を消去することです。 – arunkumar

+0

私もこのことに驚きましたが、私はこれに完全に喜んでいました。 "すごい"と思った。しかし、今私は完了するためにタブを傍受したいと思います。私は手でキーを一つずつ取得する必要がある場合、私はその機能を失うかもしれないようです。クールな機能だが拡張可能ではないようだ。また、Ctrl + Rヒストリルックアップを実装していないのはなぜですか? MS .... –

+0

実際、コンソールがF8(bash Ctrl + r)とF9(bash!n)をサポートしていることが事実です。これは突然の名声のすべての絶対awesomenessです。 http://ss64.com/nt/syntax-keyboard.html –

答えて

20

で見つけることができます構造...あなたはDllImportなど

http://msdn.microsoft.com/en-us/library/ms686031%28v=VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms682077%28v=VS.85%29.aspx

を使用する必要がありますので、管理対象クラス/メソッドはなさそうです

必要であれば - テストされていないc# console, Console.Clear problem

+0

+1どういうわけかそのAPI機能が欠落している必要があります。私はそのページをすでに開いていました:-)私は、後でその機能を無効にしようとすることに気をつけるつもりはないと思います。私はむしろReadKey()を使用して私自身の入力処理を使用します。これは歴史を完全に回避するはずです。 – TheFogger

4

履歴機能はWindowsコマンドシェルに組み込まれていますが、アプリケーションの機能ではありません。 AFAIKあなたのコードでこれを無効にする方法はありません(変更可能な設定がない限り、Windowsシェル環境に固有のものです)

キーリスナーを使用してデフォルトの動作をすべての上向き矢印キーを取得して独自のコードを実行すると、イベントはシェルに処理されません。

+1

最初の回答以上の人はいませんか? Sheesh。 – x0n

+0

さて、あなたの答えは、私の理解からプログラム的に物事をコントロールしたいので、本当に彼が本当に望んでいることをする方法を彼に与えるものではないということです。それは彼のセットアップの回避策です。理想的には、自分のコードで実装することを望んでいるので、コマンド履歴のOWN実装を望んでいます。 –

+0

downvoteとほぼ同じ3つの答えを見つけてください。良い仕事の男 –

4

はい、これはアプリケーションではなくコンソールサブシステムの機能です。それを変更するには、コンソールのコントロールボックス(左上)、プロパティ、オプションタブをクリックします:「コマンド履歴」デフォルトは50項目、4バッファです。おそらく、これはコマンドラインからDOSKEYを使ってプログラムで設定することができますが、何分か手直ししても私をどこにも導きませんでした。

ALT+F7は、コマンドDOSKEY /reinstallを実行するのと同じように、コマンド履歴をクリアします。私はWindowsでテストした7

更新:対応のWin32 API呼び出しがSetConsoleHistoryInfoであり、pは/署名を起動するには、プログラムで正しくセットアップCONSOLE_HISTORY_INFOSetConsoleHistoryInfoを呼び出すことによって、あなたは窓のこの動作を変更することができますhttp://pinvoke.net/default.aspx/kernel32/SetConsoleHistoryInfo.html

0

を参照してください、それはバッファサイズでSetConsoleHistoryInfoCONSOLE_HISTORY_INFOのインスタンスを渡すように見えると1になり設定した回数 - コンソールのいくつかの他の側面は、管理対象の方法で処理することができますコンソールウィンドウのプロパティダイアログと同じコントロールを与えます。またpinvoke.net

P /呼び出しの定義は、これが、後にWindowsのV6か(すなわち。ビスタ/ 7分の2008/2008R2)が必要です注意してください。

関連する問題