2011-08-07 11 views
3

MonoコンソールでReadline()を使用してctrl +をキャッチする方法はありますか? Mono 2.10.2を使用しています。たとえば、Ctrl-Dを押すと、何も起こりません。私はReadLine()が何のシグナルを押しているのか分かりません。catch Control + key in Mono C#Readline

答えて

2

の文章をコンソールに入力します。

コントロールキーにはテキストが含まれていないため、見た目には「キャッチ」されません。コントロールキーをキャッチするには、Console.ReadKey()関数を使用します。

ここにはdocumentation page for Console.ReadKey()のサンプルがあります。

ConsoleKeyInfo cki; 
    // Prevent example from ending if CTL+C is pressed. 
    Console.TreatControlCAsInput = true; 

    Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key."); 
    Console.WriteLine("Press the Escape (Esc) key to quit: \n"); 
    do 
    { 
    cki = Console.ReadKey(); 
    Console.Write(" --- You pressed "); 

    if((cki.Modifiers & ConsoleModifiers.Alt) != 0) 
     Console.Write("ALT+"); 
    if((cki.Modifiers & ConsoleModifiers.Shift) != 0) 
     Console.Write("SHIFT+"); 
    if((cki.Modifiers & ConsoleModifiers.Control) != 0) 
     Console.Write("CTL+"); 

    Console.WriteLine(cki.Key.ToString()); 
    } while (cki.Key != ConsoleKey.Escape); 
+0

多分私は何かが欠けているかもしれませんが、それはしません。テキスト全体を読む必要がありますが、ctrl-dとctrl-zもキャッチする必要があります。 –

+0

ドキュメントを読んだら、 'Console.ReadKey(bool)'を使うことができます。これにより、上記のコードを使って 'Ctrl + D 'を検出し、コンソールに文字を出力することができます。上で説明したように、 'Console.ReadLine()'で特別な文字をキャプチャすることはできません。 – foxy

+1

CTRL-dではなく、 "EOF"シグナルイベントを捕まえたいと思います。 –