みぃちゃんの頭の中はおもちゃ箱

略してみちゃばこ。泣いたり笑ったり

クリップボードのテキストを出力する (showclip.c)

2013年08月09日 22時43分23秒 | IT・デジタル
クリップボードに入っているテキストを出力するプログラム。Windows用です。Cで書きました。

ρ(∂_∂) ソースだよ☆
showclip.c:
/* Show contents of the clipboard */

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

#define	BUFSIZ	4096

/* Exit values */
#define	SUCCESS	0
#define	WARNING	128
#define	FAILURE	255

static char buf[ BUFSIZ];

int main()
{
	int retcode = FAILURE;
	if (IsClipboardFormatAvailable( CF_TEXT)) {
		if (OpenClipboard( 0)) {
			HANDLE hData = GetClipboardData( CF_TEXT);
			if (hData) {
				strncpy( buf, (char *)GlobalLock( hData), sizeof( buf) - 1);
				buf[ sizeof( buf) - 1] = '¥0';
				GlobalUnlock( hData);
				retcode = SUCCESS;
			}
			CloseClipboard();
		}
		printf( "%s", buf);
	}
	return retcode;
}


作成したきっかけは、頻繁にクリップボードの内容をコマンドに渡す必要があり、いちいちWindowsコマンドプロンプトにクリップボードの内容を貼り付ける ([Alt]+[Space] を押し、[編集(E)] → [貼り付け(P)] を選択する) 操作さえ面倒だったことです。showclip.exeさえあれば、バッチコマンドの中で以下のように記述することで、簡単にクリップボードの内容を任意のコマンドに渡すことができます。
FOR /F "usebackq delims=" %%i IN (`showclip`) DO myprogram %%i

クリップボードの内容をテキスト出力するツールとしては、既にGNUのpclipがありますが、テキスト出力前に簡単な整形もさせられるように、自分でコーディングしました。後々pclipと異なるオプションを実装する可能性があるため、名前をshowclipとして区別しています。

今回もバイナリをコンパクトにしたかったので、C++ではなく、Cで書きました。おかげで私が使っているバイナリは52KBとコンパクトに収まっています。ご入用の方は、お好きなコンパイラでコンパイルしてご利用ください。