クリップボードが持つデータ形式の列挙と表示 <TOP>
OpenClipboard クリップボードをオープン
CloseClipboard クリップボードをクローズ
EnumClipboardFormats クリップボード内にあるフォーマットを列挙
GetClipboardData クリップボードから指定フォーマットのデータを検索
GetClipboardFormatName クリップボードのフォーマットから名前を取得
lstrlen
指定された文字列のバイトまたは文字の長さを返す
lstrcpy
文字列をコピーする
GlobalLock
ヒープに確保されたメモリをロック
GlobalUnlock メモリブロックのロックを解除
GetObject
オブジェクト取得
BitBlt
ビットブロック転送
CreateCompatibleDC 指定されたデバイスコンテキストに関連するデバイスと互換性のあるメモリデバイスコンテキストを作成
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
GetDC
デバイスコンテキストのハンドルを取得
ReleaseDC
デバイスコンテキストを解放
例では、最初文字列を、次にデスクトップをコピーした場合のデータ形式の列挙と、形式項目を選択した場合のデータを表示しています。
'================================================================ '= クリップボードが持つデータ形式の列挙と表示 '= (EnumClipboardFormats.bas) '================================================================ #include "Windows.bi" Type BITMAP bmType As Long bmWidth As Long bmHeight As Long bmWidthBytes As Long bmPlanes As Integer bmBitsPixel As Integer bmBits As Long End Type ' クリップボードをオープン Declare Function Api_OpenClipboard& Lib "user32" Alias "OpenClipboard" (ByVal hWnd&) ' クリップボードをクローズ Declare Function Api_CloseClipboard& Lib "user32" Alias "CloseClipboard" () ' クリップボード内にあるフォーマットを列挙 Declare Function Api_EnumClipboardFormats& Lib "user32" Alias "EnumClipboardFormats" (ByVal wFormat&) ' クリップボードから指定フォーマットのデータを検索 Declare Function Api_GetClipboardData& Lib "user32" Alias "GetClipboardData" (ByVal wFormat&) ' クリップボードのフォーマットから名前を取得 Declare Function Api_GetClipboardFormatName& Lib "user32" Alias "GetClipboardFormatNameA" (ByVal wFormat&, ByVal lpString$, ByVal nMaxCount&) ' 指定された文字列のバイトまたは文字の長さを返す Declare Function Api_lstrlen& Lib "Kernel32" Alias "lstrlenA" (ByVal lpString$) ' 文字列をコピーする Declare Function Api_lstrcpy& Lib "Kernel32" Alias "lstrcpyW" (lpszString1 As Any, lpszString2 As Any) ' ヒープに確保されたメモリをロック Declare Function Api_GlobalLock& Lib "kernel32" Alias "GlobalLock" (ByVal hMem&) ' メモリブロックのロックを解除 Declare Function Api_GlobalUnlock& Lib "kernel32" Alias "GlobalUnlock" (ByVal hMem&) ' オブジェクト取得 Declare Function Api_GetObject& Lib "gdi32" Alias "GetObjectA" (ByVal hObject&, ByVal nCount&, lpObject As Any) ' ビットブロック転送を行う。コピー元からコピー先のデバイスコンテキストへ、指定された長方形内の各ピクセルの色データをコピー Declare Function Api_BitBlt& Lib "gdi32" Alias "BitBlt" (ByVal hDestDC&, ByVal X&, ByVal Y&, ByVal nWidth&, ByVal nHeight&, ByVal hSrcDC&, ByVal xSrc&, ByVal ySrc&, ByVal dwRop&) ' 指定されたデバイスコンテキストに関連するデバイスと互換性のあるメモリデバイスコンテキストを作成 Declare Function Api_CreateCompatibleDC& Lib "gdi32" Alias "CreateCompatibleDC" (ByVal hDC&) ' 指定されたデバイスコンテキストのオブジェクトを選択 Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) #define SRCCOPY &HCC0020 'そのまま転送 #define CF_BITMAP 2 'ビットマップのデータ(HBITMAP) #define CF_TEXT 1 'テキスト形式のデータ。各行は復帰改行(CR-LF)コードで終わる Var Shared List1 As Object Var Shared Picture1 As Object Var Shared Button1 As Object List1.Attach GetDlgItem("List1") : List1.SetFontSize 12 List1.SetWindowSize 152, 136 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Picture1.Attach GetDlgItem("Picture1") Var Shared mhDC As Long Var Shared phDC As Long '================================================================ '= '================================================================ Declare Sub MainFOrm_Start edecl () Sub MainForm_Start() 'ピクチャボックスのデバイスコンテキストを取得 phDC = Api_GetDC(Picture1.GethWnd) 'メモリデバイスコンテキストを作成 mhDC = Api_CreateCompatibleDC(phDC) End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var lFormat As Long Var sFormat As String * 256 Var i As Integer Var Ret As Long List1.ResetContent Picture1.Cls Ret = Api_OpenClipboard(GethWnd) Do i = i + 1 lFormat = Api_EnumClipboardFormats(lFormat) If lFormat = 0 Then Exit Do Select Case lFormat Case CF_TEXT sFormat = "Text" & Chr$(0) Case CF_BITMAP sFormat = "Bitmap" & Chr$(0) Case CF_METAFILEPICT sFormat = "CF_METAFILEPICT" & Chr$(0) Case CF_SYLK sFormat = "CF_SYLK" & Chr$(0) Case CF_DIF sFormat = "CF_DIF" & Chr$(0) Case CF_TIFF sFormat = "CF_TIFF" & Chr$(0) Case CF_OEMTEXT sFormat = "CF_OEMTEXT" & Chr$(0) Case CF_DIB sFormat = "CF_DIB" & Chr$(0) Case CF_PALETTE sFormat = "CF_PALETTE" & Chr$(0) Case CF_PENDATA sFormat = "CF_PENDATA" & Chr$(0) Case CF_RIFF sFormat = "CF_RIFF" & Chr$(0) Case CF_WAVE sFormat = "CF_WAVE" & Chr$(0) Case CF_UNICODETEXT sFormat = "CF_UNICODETEXT" & Chr$(0) Case CF_ENHMETAFILE sFormat = "CF_ENHMETAFILE" & Chr$(0) Case CF_HDROP sFormat = "CF_HDROP" & Chr$(0) Case CF_LOCALE sFormat = "CF_LOCALE" & Chr$(0) Case CF_DIBV5 sFormat = "CF_DIBV5" & Chr$(0) Case Else If Api_GetClipboardFormatName(lFormat, sFormat, Len(sFormat)) = 0 Then sFormat = "不明" & Chr$(0) End If End Select List1.AddString Left$(sFormat, InStr(1, sFormat, Chr$(0)) - 1) & " (" & Trim$(Str$(lFormat)) & ")" Loop Ret = Api_CloseClipboard End Sub '================================================================ '= '================================================================ Declare Sub List1_Click edecl () Sub List1_Click() Var bmp As BITMAP Var hBit As Long Var hBitmap As Long Var TmpStr As String Var TmpStr2 As String Var StrLen As Long Var hTmpStr As Long Var pTmpStr As Long Var Ret As Long TmpStr2 = List1.GetText(List1.GetCursel) Select Case Left$(TmpStr2, InStr(TmpStr2, "(") - 2) Case "Text" Ret = Api_OpenClipboard(GethWnd) hTmpStr = Api_GetClipboardData(CF_TEXT) pTmpStr = Api_GlobalLock(hTmpStr) TmpStr = Space$(Api_lstrLen(ByVal pTmpStr)) Ret = Api_lstrcpy(TmpStr, ByVal pTmpStr) Ret = Api_GlobalUnlock(hTmpStr) Picture1.Cls Picture1.SetFontName "MS ゴシック" Picture1.SetFontSize 12 Picture1.Print TmpStr Case "Bitmap" Ret = Api_OpenClipboard(GethWnd) '指定フォーマットのBITMAPデータを検索 hBit = Api_GetClipboardData(CF_BITMAP) 'Object取得 Ret = Api_GetObject(hBit, Len(bmp), bmp) 'Object選択 Ret = Api_SelectObject(mhDC, hBit) Picture1.Cls Picture1.SetFontSize 12 '指定のデバイスコンテキストにメモリデバイスコンテキストのデータを転送 Ret = Api_BitBlt(phDC, 0, 0, bmp.bmWidth, bmp.bmHeight, mhDC, 0, 0, SRCCOPY) Case Else Picture1.Cls Picture1.SetFontSize 12 Picture1.Print "表示できません!" End Select Ret = Api_CloseClipboard End Sub '================================================================ '= '================================================================ Declare Sub MainForm_QueryClose edecl () Sub MainForm_QueryClose() Var Ret As Long Ret = Api_ReleaseDC(Picture1.GethWnd, phDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End