クリップボードを操作する確実な方法
クリップボードは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;
}
