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

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

クリップボードの文字列を複製取得 - funcClipGets()

2010年02月09日 07時02分00秒 | 便利ライブラリ関数

クリップボードの文字列を複製して取得するには次の手順で行います。(戻る)

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

関連記事



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

コメントを投稿

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