コマンドラインコピーツール
- [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
コメント