コマンドラインコピーツール
- [etc]
小品。コマンドラインで渡された文字列をクリップボードにセットするだけのプログラム。ショートカットを「送る」に追加しておけば、任意のファイルのフルパスをクリップボードにコピーできたり。
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <tchar.h>
#define APPNAME _T( "SendClip" )
static void
ShowErrorMessage(
DWORD dwLastError ) // (in) エラーコード
{
DWORD dwRet;
PVOID lpBuf = NULL;
LPTSTR lpszMessage = NULL;
// エラーメッセージを取得
dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS
, NULL
, dwLastError
, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
, (LPTSTR)&lpBuf, 0, NULL );
if ( dwRet ) {
lpszMessage = (LPTSTR)calloc( dwRet + 1024, sizeof (TCHAR) );
if ( lpszMessage ) {
_stprintf( lpszMessage, _T( "エラーが発生しました\r\n%d:%s" ), dwLastError, lpBuf );
// メッセージを表示
MessageBox( NULL, lpszMessage, APPNAME, MB_OK|MB_ICONSTOP );
free( lpszMessage );
lpszMessage = NULL;
}
LocalFree( lpBuf );
}
return;
}
int WINAPI
WinMain(
HINSTANCE hInstance, // (in) handle to current instance
HINSTANCE hPrevInstance, // (in) handle to previous instance
LPSTR lpCmdLine, // (in) pointer to command line
int nCmdShow ) // (in) show state of window
{
DWORD dwBytes = 0;
HGLOBAL hMem = NULL;
CHAR *lpszMem = NULL;
BOOL bRet = TRUE;
HANDLE hClip = NULL;
// 必要な長さを取得
dwBytes = strlen( lpCmdLine );
if ( !dwBytes ) {
return 0;
}
// グローバルメモリを確保
hMem = GlobalAlloc( GHND, dwBytes + 1 );
if ( !hMem ) {
ShowErrorMessage( GetLastError() );
}
else {
// メモリをロックしてポインタを取得
lpszMem = (LPSTR)GlobalLock( hMem );
if ( !lpszMem ) {
ShowErrorMessage( GetLastError() );
}
else {
// グローバルメモリにデータをセット
strcpy( lpszMem, lpCmdLine );
GlobalUnlock( hMem );
lpszMem = NULL;
// クリップボードオープン
bRet = OpenClipboard( NULL );
if ( !bRet ) {
ShowErrorMessage( GetLastError() );
}
else {
// クリップボードクリア
bRet = EmptyClipboard();
if ( !bRet ) {
ShowErrorMessage( GetLastError() );
}
else {
// データをセット
hClip = SetClipboardData( CF_TEXT, hMem );
if ( !hClip ) {
ShowErrorMessage( GetLastError() );
bRet = FALSE;
}
}
// クリップボードをクローズ
CloseClipboard();
if ( bRet ) { // セットに成功
return 0;
}
}
}
// 失敗した場合はメモリを解放する
GlobalFree( hMem );
}
return -1;
}
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/775
コメント