クリップボードにテキストを書き込むには次の手順で行います。(戻る)
- 文字数からバイト数に変換する
- グローバル・メモリを確保する(GlobalAlloc)
- メモリのハンドルをロックする(GlobalLock)
- 引数 lpBuff のデータをコピー(funcCopyString)
- メモリのハンドルをロック解除(GlobalUnlock)
- クリップボードをオープンする(OpenClipboard)
- クリップボードのデータを解放(EmptyClipboard)
- クリップボードにメモリを設定(SetClipboardData)
- クリップボードをクローズする(CloseClipboard)
funcCopyString は自作関数です。
プロトタイプ宣言
BOOL OpenClipboard( HWND hWndNewOwner // ウインドウのハンドル ); BOOL CloseClipboard( VOID ); BOOL EmptyClipboard( VOID ); HANDLE SetClipboardData( UINT uFormat // クリップボードのデータ形式 HANDLE hMem // データのハンドル ); HGLOBAL GlobalAlloc( UINT uFlags, // 割り当ての属性 SIZE_T dwBytes // 割り当てたいバイト数 ); HGLOBAL GlobalFree( HGLOBAL hMem // グローバル・メモリのハンドル ); LPVOID GlobalLock( HGLOBAL hMem // グローバル・メモリのハンドル ); BOOL GlobalUnlock( HGLOBAL hMem // グローバル・メモリのハンドル );
ANSI/UNICODE両用のクリップボード定数
#ifndef CF_CLIPTEXT # ifdef UNICODE # define CF_CLIPTEXT CF_UNICODETEXT # else # define CF_CLIPTEXT CF_TEXT # endif #endif
サンプル
// クリップボードにテキストを書き込む extern BOOL funcClipWrite( HWND hWnd, LPCTSTR lpBuff, DWORD dwSize ) { HGLOBAL hMem; LPTSTR lpClip; DWORD dwByte; // 文字数からバイト数に変換 dwByte = dwSize; dwByte *= sizeof(TCHAR); dwByte += sizeof(TCHAR); if ( (hMem = GlobalAlloc((GHND|GMEM_SHARE),dwByte)) != NULL ){ if ( (lpClip = (LPTSTR)GlobalLock(hMem)) != NULL ){ funcCopyString( lpClip, (dwSize + 1), lpBuff ); GlobalUnlock( hMem ); // クリップボードにコピー if ( OpenClipboard(hWnd) ){ EmptyClipboard(); SetClipboardData( CF_CLIPTEXT, hMem ); CloseClipboard(); return TRUE; } } GlobalFree( hMem ); } return FALSE; } // 使用例 int main( void ) { HWND hWnd = GetDesktopWindow(); TCHAR szBuff[ 1024 ]; LPTSTR lpBuff = szBuff; lpBuff += wsprintf( lpBuff, TEXT("1行目:あいうえお\n") ); lpBuff += wsprintf( lpBuff, TEXT("2行目:かきくけこ\n") ); lpBuff += wsprintf( lpBuff, TEXT("3行目:さしすせそ\n") ); if ( funcClipWrite(hWnd,szBuff,lstrlen(szBuff)) ){ printf( TEXT("クリップボードにテキストをコピーしました。\n") ); } else{ printf( TEXT("クリップボードが開けないか、またはメモリを確保できません。\n") ); } return 0; }
- hWnd にウインドウのハンドルを指定します。
- lpBuff に書き込むテキストのバッファを指定します。
- dwSize に書き込むテキストのサイズ(長さ)を指定します。
その他
- funcClipWrite 関数は「マルチバイト文字セット」、「Unicode文字セット」の両方に対応しています。
- 使用例のコンパイル時は printf 使用のため「マルチバイト文字セット」で行って下さい。
- なお、使用例ではクリップボードに3行のテキストデータをコピーします。
関連記事
- クリップボードのデータをクリア - funcClipClear()
- クリップボードからテキストを読み込む - funcClipRead()
- クリップボードにテキストを書き込む - funcClipWrite()
- クリップボードの文字列を複製取得 - funcClipGets()
- クリップボードに文字列を出力 - funcClipPuts()
- クリップボードに書式列を出力 - funcClipPutf()
- クリップボードの基本関数(まとめ)
どうもありがとうございました。