プログラミング工房 > WideStudio > サンプルアプリケーション >

標準入出力とクリップボードの間でテキストをコピー

 このサンプルは、標準入力がリダイレクトされていれば、そこからデータを取得してクリップボードに出力し、リダイレクトされていなければ、クリップボードのテキストを取得して標準出力に出力するコンソール・アプリです。

 このプログラムは最初に標準入力がリダイレクトされているかどうかで処理を分けていますが、これはisatty(fileno(stdin))の値でチェックすることができます。真であればリダイレクトされておらず、偽であればされています。isatty()もfileno()もC言語の関数です。

 標準入力がリダイレクトされていない場合は、WideStudioのライブラリで用意されているキーボードを表すクラスのグローバル・インスタンスからクリップボード内のテキストを取得してサイズを調べ、0でなければC++の機能を使ってそのまま標準出力に流し込んでいます。std::coutはC++が使えるときにはデフォルトで定義されているostreamクラスのオブジェクトで、標準出力を意味しています。<<演算子はそれに対して文字列をそのまま出力します。

 一方、標準入力がリダイレクトされていた場合は、std::cinのget()関数を使って1文字(バイト)ずつテキストデータを読み込みます。std::cinはstd::coutと対になる標準入力を意味するistreamクラスのオブジェクトです。これもいきなり使えます。std::cinにはstd::coutの<<演算子とは逆に入力データを変数に受け取るための>>演算子があり、ここでもそれを使って簡単に済ませたいところなのですが、>>演算子はデータの先頭にある空白文字(1バイトスペースやタブ文字)を自動的にカットしてしまうため使えません。そして次にテキストをクリップボードにコピーしますが、std::stringクラスのc_str()関数の結果を直接キーボードを表すグローバル・インスタンスのsetSelectedString()関数に渡すことができないため、WSCstringクラスの変数を介して行っています。

 WideStudio(C/C++)でコンソール・アプリをビルドする方法については、「標準入出力のリダイレクトに対応したコンソール・アプリケーションを作る」のページを見てください。

>> ソースコードを見る

>> ダウンロード  ソース (1KB)