Clipboard.クリップボード





クリップボードに文字列をセット


char str[] = "test"; //(A)クリップデータへ格納するデータは共有メモリに格納する必要があります。 //   必要なだけの共有メモリを獲得してそこにデータをコピーします int len = strlen(str)+1; HGLOBAL hData = (HGLOBAL)::GlobalAlloc(GHND, (DWORD)len); char *pData = (char *)GlobalLock( hData ); strcpy(pData, str); GlobalUnlock(hData); :: OpenClipboard(NULL); //今クリップボードに入っているデータを廃棄します。 :: EmptyClipboard(); //(D)クリップボードへグローバルメモリを登録する if (::SetClipboardData(CF_TEXT, hData) == NULL) { // 登録失敗の場合は、自分で共有メモリを開放する必要があります。 :: GlobalFree(hData); } // クリップボードをクローズする :: CloseClipboard();



クリップボードにあるテキストデータを表示


GetClipboardDataを使用して、クリップボードにあるテキストデータを取得し表示する。
{ OpenClipboard(NULL); HANDLE hText = GetClipboardData(CF_TEXT); if(hText == NULL) { printf("クリップボードにテキストデータはない。\n"); } else { char *pText = GlobalLock( hText ); printf("%s\n", pText); GlobalUnlock(hText); } CloseClipboard(); }



GlobalLock


DESC グローバルメモリオブジェクトをロックし メモリブロックの最初の 1 バイトへのポインタを返します。 SYNTAX LPVOID GlobalLock( HGLOBAL hMem // グローバルメモリオブジェクトのハンドル ); POINT ロックというのは メモリのアドレスが移動することをロックするらしい。


CloseClipboard


SYNTAX BOOL CloseClipboard(); RETURN !0 : 失敗 0 : 成功


GetClipboardData


HANDLE GetClipboardData( UINT uFormat // クリップボードのデータ形式 ); RETURN 指定したデータ形式のクリップボードオブジェクトのハンドルが返ります。 NULL : 失敗


SetClipboardData


HANDLE SetClipboardData( UINT uFormat, // クリップボードのデータ形式 HANDLE hMem // データのハンドル );


FILE_TYPE


http://www.sage-p.com/b/public_vml/dragdrop.html CF_TYPE CF_BITMAP http://blog.goo.ne.jp/masaki_goo_2006/e/c051af6aa9c44b5cd8cd7ac97b1c5057