ハードなソフトの話

アクセスカウンタ

zoom RSS コマンドライン用クリップボードツールを作ってみた。

<<   作成日時 : 2006/03/04 22:15   >>

ブログ気持玉 0 / トラックバック 1 / コメント 0

ふとしたことから、Microsoft Visual C++ 2005 Express Edition をダウンロードして使ってみた。

考えてみると、Visual C++ で最後にプログラムを作ったのは4年か5年ぐらい前だった。ATLを使ってCOMを作ったのが最後だった。

本当の目的は別なところにあったのだけれど、長い間、C++を使っていないので、リハビリを兼ねて小さなコマンドラインツールを作ってみた。こういうプログラムは .Net を使うと簡単にかけそうだ。しかし、今まで、.Net 環境でプログラミングしたことはない。

文法はこんな感じ

    clp [-r]

これは、コマンドの出力をクリップボードにリダイレクトするためのツールである。たとえば、ファイルのリストをメールに貼り付けたいとき、従来なら、次の手順を踏んでいた。

[1] dir/b > list.txt <--- dir コマンドの出力を list.txt に出力する。
[2] notepad list.txt <--- notepad(メモ帳)で開く。
[3] メモ帳で[全選択]してクリップボードにコピーする。
[4] フォーカスを目的のアプリケーションに移して、クリップボードから[貼り付け]する。

このコマンドを使えば、手順をかなり省ける上に不要なファイルも生成しない。

[1] dir /b | clp <--- dir コマンドの出力をクリップボードに出力する。
[2] フォーカスを目的のアプリケーションに移して、クリップボードから[貼り付け]する。

clp -r を使うとクリップボードの内容が標準出力に出力される。クリップボードにあるテキストだけをファイルにしたいときは、こんな風にすると便利。

    clp -r > text.txt

さらに応用編として、こんなこともできる。

  (1) クリップボード内の文字列をソートする。

    clp -r | sort | clp

  (2) クリップボード内の複数行を連結して、スペース区切りの1行にする。

    clp -r | perl -p -e "s/\n/ /" | clp

  (3) クリップボード内の < や > を &lt; や &gt; に変換する。

     clp -r | perl -p -e "s/</&lt;/g; s/>/&gt;/g" | clp

まあ、こんなことができて便利だと思う人は限られるだろうけどね。
ソースは、こんな感じ、暇な人はコンパイルして使ってみて:

----ここから----

// clp.cpp
// compile with: /clr

#using <System.dll>
#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::Windows::Forms;

[STAThread] int main()
{
    array<String^>^arguments = Environment::GetCommandLineArgs();
    if( arguments->Length > 1 && arguments[1] == "-r" ){
        IDataObject^ data = Clipboard::GetDataObject( );
        if (data){
            if (data->GetDataPresent(DataFormats::Text)) {
                String^ text = static_cast<String^>
                (data->GetData(DataFormats::Text));
                Console::Write(text);
            }else return 1;
        }else return 1;
    }else{
        String^ str;
        String^ line;
        while( (line = Console::ReadLine()) != nullptr){
            str += line + "\r\n";
        }
        if( str != nullptr && str->Length > 0 )
            Clipboard::SetDataObject(str, true);
    }
    return 0;
}

--- ここまで ----

しかし、これが、C++ のプログラムかね。世の中、すっかり、変わっちまったね。
ああでも、こんな風に書かないナウでヤングなプログラマーちゃんたちについていけないのね。
つーか、もう、C++ なんか、使わないのかな?

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
続・コマンドライン用クリップボードツールを作ってみた(Active Perl編)
Microsoft Visual C++ Express Edition で clp というコマンドライン用クリップボードツールを作った。しかし、VC++ Express Edition の場合、EXEファイルをコピーするだけでは実行できないことがわかった。DLLが必要なのである。しかも、ただコピーすればいいだけということではない。その件は、いつか体力のあるときに書くことにして、たいしたことないので、clp を Active Perl で書き直した。使い方は前回の記事( http://ha... ...続きを見る
ハードなソフトの話
2006/03/17 01:09

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
コマンドライン用クリップボードツールを作ってみた。 ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる