2012-02-09 6 views
1

WindowsコンソールのCアプリケーションでエコーを無効にするにはどうすればよいですか?Windowsコンソールでエコーを無効にする方法はありますか?

_getch(まだのCtrl-C)の文字をキャプチャしたいとは思っていません。 _getchだけでなく、cmdではエコーを無効にするように見えますが、cygwinではエコーを無効にしているようです。

パイプのリダイレクトやコンソール設定の変更が必要です。

答えて

3

多分SetConsoleModecodeguruから盗まれた):[クロスプラットフォームコード]で使用

#include <iostream> 
#include <string> 
#include <windows.h> 


int main() 
{ 
    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); 
    DWORD mode = 0; 
    GetConsoleMode(hStdin, &mode); 
    SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT)); 

    std::string s; 
    std::getline(std::cin, s); 

    std::cout << s << "\n"; 
    return 0; 
}//main 
+0

同じ考え方(http://code.google.com/p/xpost/source/browse/src/lib /xpost_compat.c#87)は、Windowsのケースをきれいにカバーします。 –

0

はい、私の考えでは、freopenを使って基本的にstdoutファイル記述子の後ろにあるファイルを変更するのが最も簡単な方法です。

あなたが一度に出力を保存したくない場合、あなたは(は/ dev /のように/ dev/nullのを書くことができるはず

freopen("C:\some_file.txt", "w", stdout); 

を使用してファイルにコンソール出力をリダイレクトすることができnullは、私はあなたが以下のようなものが動作するはずですので、「NUL」または「\デバイス\ヌル」

を試すことができていないことを()のUnixであるが、Windowsで:

freopen("\Device\Null", "w", stdout); 

申し訳ありませんが、私は私は実際にそれを試すことができません窓はありませんが、それは主なアイデアです。

関連する問題