クリップボードを操作する確実な方法
クリップボードはWindowsの主要な機能の1つです。文字列や画像、オリジナル形式のデータなどを アプリケーションの垣根を越えて扱うための一時的な保存場所である。「コピー&ペースト」として 広く使用されています。クリップボードは多種多様な情報を扱うことができるがここではテキスト形式 (CF_TEXT)を取り扱う方法を説明します。
// クリップボードに文字列を登録する // // [引数] // szText : 登録する文字列 // // [返値] // 登録に成功した場合 : TRUE // 登録に失敗した場合 : FALSE BOOL SetClipBoardText(char *szText) { HGLOBAL hGMem; if (lstrlen(szText) == 0) return FALSE; if( !OpenClipboard(NULL) ) return FALSE; hGMem = ::GlobalAlloc(GMEM_FIXED, lstrlen(szText) + 1); lstrcpy((char *)hGMem, szText); EmptyClipboard(); SetClipboardData(CF_TEXT, hGMem); CloseClipboard(); return TRUE; }
// クリップボードから文字列を取得する // // [引数] // szBuffer : 文字列を保存するバッファ // nBufferSize : バッファサイズ // // [返値] // データが取得できた場合 : TRUE // データが存在しない or 取得失敗 : FALSE BOOL GetClipBoardText(char *szBuffer, int nBufferSize) { HANDLE hMem; BOOL bRet = TRUE; // テキストが登録されているか確認 if( !IsClipboardFormatAvailable(CF_TEXT) ) return FALSE; if( !OpenClipboard(NULL) ) return FALSE; hMem = ::GetClipboardData(CF_TEXT); char* pszClipBoard = (LPTSTR)::GlobalLock(hMem); if (lstrlen(pszClipBoard) < nBufferSize) { lstrcpy(szBuffer, pszClipBoard); } else { bRet = FALSE; } GlobalUnlock(hMem); CloseClipboard(); return bRet; }