クリップボードからテキストを読み込むには次の手順で行います。(戻る)
- クリップボードをオープンする(OpenClipboard)
- クリップボードのメモリを取得(GetClipboardData)
- メモリのハンドルをロックする(GlobalLock)
- 引数 lpBuff にデータをコピー(funcZeroString、funcCopyString)
- メモリのハンドルをロック解除(GlobalUnlock)
- クリップボードをクローズする(CloseClipboard)
funcZeroString、funcCopyString は自作関数です。
プロトタイプ宣言
BOOL OpenClipboard( HWND hWndNewOwner // ウインドウのハンドル ); BOOL CloseClipboard( VOID ); HANDLE GetClipboardData( UINT uFormat // クリップボードのデータ形式 ); 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 funcClipRead( HWND hWnd, LPTSTR lpBuff, DWORD dwSize ) { HGLOBAL hMem; LPCTSTR lpClip; if ( OpenClipboard(hWnd) ){ if ( (hMem = GetClipboardData(CF_CLIPTEXT)) != NULL ){ if ( (lpClip = (LPCTSTR)GlobalLock(hMem)) != NULL ){ if ( lstrlen(lpClip) == 0 ){ funcZeroString( lpBuff, dwSize ); } else{ funcCopyString( lpBuff, dwSize, lpClip ); } GlobalUnlock( hMem ); CloseClipboard(); return TRUE; } } CloseClipboard(); } return FALSE; } // 使用例 int main( void ) { HWND hWnd = GetDesktopWindow(); TCHAR szBuff[ 32 * 1024 ]; if ( funcClipRead(hWnd,szBuff,(32 * 1024)) ){ printf( TEXT("%s"), szBuff ); } else{ printf( TEXT("クリップボードが開けないか、またはデータがありません。\n") ); } return 0; }
- hWnd にウインドウのハンドルを指定します。
- lpBuff に読み込むテキストのバッファを指定します。
- dwSize に読み込むテキストのバッファ容量を指定します。
その他
- funcClipRead 関数は「マルチバイト文字セット」、「Unicode文字セット」の両方に対応しています。
- 使用例のコンパイル時は printf 使用のため「マルチバイト文字セット」で行って下さい。
- なお、使用例ではクリップボードの内容を読み取り表示します。
関連記事
- クリップボードのデータをクリア - funcClipClear()
- クリップボードからテキストを読み込む - funcClipRead()
- クリップボードにテキストを書き込む - funcClipWrite()
- クリップボードの文字列を複製取得 - funcClipGets()
- クリップボードに文字列を出力 - funcClipPuts()
- クリップボードに書式列を出力 - funcClipPutf()
- クリップボードの基本関数(まとめ)
※コメント投稿者のブログIDはブログ作成者のみに通知されます