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