プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

クリップボードからテキストを読み込む - funcClipRead()

2010年02月08日 14時42分00秒 | 便利ライブラリ関数

クリップボードからテキストを読み込むには次の手順で行います。(戻る)

  1. クリップボードをオープンする(OpenClipboard)
  2. クリップボードのメモリを取得(GetClipboardData)
  3. メモリのハンドルをロックする(GlobalLock)
  4. 引数 lpBuff にデータをコピー(funcZeroString、funcCopyString)
  5. メモリのハンドルをロック解除(GlobalUnlock)
  6. クリップボードをクローズする(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 使用のため「マルチバイト文字セット」で行って下さい。
  • なお、使用例ではクリップボードの内容を読み取り表示します。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« クリップボードのデータをク... | トップ | クリップボードにテキストを... »
最新の画像もっと見る

コメントを投稿

便利ライブラリ関数」カテゴリの最新記事