クリップボード内にあるフォーマットを列挙(T)          <TOP>


クリップボード内にあるフォーマットを列挙します。

CountClipboardFormats クリップボード内のフォーマット数を取得

EnumClipboardFormats クリップボード内にあるフォーマットを列挙

OpenClipboard クリップボードをオープン

CloseClipboard クリップボードをクローズ

GetClipboardFormatName クリップボードのフォーマットから名前を取得

 

テキストをコピーした場合

画像をコピーした場合

 

'================================================================
'= クリップボード内にあるフォーマットを列挙(T)
'=    (GetClipboardFormatName.bas)
'================================================================
#include "Windows.bi"

' クリップボード内のフォーマット数を取得
Declare Function Api_CountClipboardFormats& Lib "User32" Alias "CountClipboardFormats" ()

' クリップボード内にあるフォーマットを列挙
Declare Function Api_EnumClipboardFormats& Lib "User32" Alias "EnumClipboardFormats" (ByVal wFormat&)

' クリップボードをオープン
Declare Function Api_OpenClipboard& Lib "User32" Alias "OpenClipboard" (ByVal hWnd&)

' クリップボードをクローズ
Declare Function Api_CloseClipboard& Lib "User32" Alias "CloseClipboard" ()

' クリップボードのフォーマットから名前を取得
Declare Function Api_GetClipboardFormatName& Lib "User32" Alias "GetClipboardFormatNameA" (ByVal wFormat&, ByVal lpString$, ByVal nMaxCount&)

#define CF_TEXT 1                       'テキスト形式のデータ。各行は復帰改行(CR-LF)コードで終わる
#define CF_BITMAP 2                     'ビットマップのデータ(HBITMAP)
#define CF_METAFILEPICT 3               'メタファイル画像形式。METAFILEPICT構造体のメモリオブジェクト
#define CF_SYLK 4                       'Microsoftシンボリックリンク(SYLK)形式のデータ
#define CF_DIF 5                        'SoftwareArts社のDIFデータ交換形式
#define CF_TIFF 6                       'TIFF形式の画像データ
#define CF_OEMTEXT 7                    'OEM 文字セットの文字を持つテキスト形式データ
#define CF_DIB 8                        '構造体とビットマップビットからなるメモリオブジェクト
#define CF_PALETTE 9                    'カラーパレットのハンドル
#define CF_PENDATA 10                   'Windowsのペン拡張機能のためのデータ
#define CF_RIFF 11                      'RIFF 形式の音声データ
#define CF_WAVE 12                      'WAVE 形式の音声データ
#define CF_UNICODETEXT 13               'Unicodeのテキスト形式
#define CF_ENHMETAFILE 14               '拡張メタファイルのデータです(HENHMETAFILE)
#define CF_HDROP 15                     'HDROP型
#define CF_LOCALE 16                    'テキストデータのロケールIDハンドル
#define CF_DIBV5 17                     '構造体とビットマップビットからなるメモリオブジェクト(Windows2000)

Var Shared List1 As Object
Var Shared Text1 As Object
Var Shared Button1 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 12
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 12
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 12

'================================================================
'=
'================================================================
Declare Function FormatName(lFormatId As Long ) As String
Function FormatName(lFormatId As Long ) As String
    Var lSize As Long
    Var sBuf As String
    Var Ret As Long
    
    If (lFormatId >= 1 And lFormatId <= 17) Then
        Select Case lFormatId
            Case CF_TEXT
                FormatName = "CF_TEXT        : " & "テキスト形式のデータ"
            Case CF_BITMAP
                FormatName = "CF_BITMAP      : " & "ビットマップ形式のデータ(HBITMAP)"
            Case CF_METAFILEPICT
                FormatName = "CF_METAFILEPICT: " & "メタファイル画像形式"
            Case CF_SYLK
                FormatName = "CF_SYLK        : " & "シンボリックリンク(SYLK)形式のデータ"
            Case CF_DIF
                FormatName = "CF_DIF         : " & "SoftwareArts社のDIFデータ交換形式"
            Case CF_TIFF
                FormatName = "CF_TIFF        : " & "TIFF形式の画像データ"
            Case CF_OEMTEXT
                FormatName = "CF_OEMTEXT     : " & "OEM文字セットの文字を持つテキスト形式データ"
            Case CF_DIB
                FormatName = "CF_DIB         : " & "構造体とビットマップビットからなる形式データ"
            Case CF_PALETTE
                FormatName = "CF_PALETTE     : " & "カラーパレットのハンドル"
            Case CF_PENDATA
                FormatName = "CF_PENDATA     : " & "Windowsのペン拡張機能のためのデータ"
            Case CF_RIFF
                FormatName = "CF_RIFF        : " & "RIFF形式の音声データ"
            Case CF_WAVE
                FormatName = "CF_WAVE        : " & "WAVE形式の音声データ"
            Case CF_UNICODETEXT
                FormatName = "CF_UNICODETEXT : " & "Unicodeのテキスト形式"
            Case CF_ENHMETAFILE
                FormatName = "CF_ENHMETAFILE : " & "拡張メタファイルのデータ"
            Case CF_HDROP
                FormatName = "CF_HDROP       : " & "ファイルリスト(HDROP型)"
            Case CF_LOCALE
                FormatName = "CF_LOCALE      : " & "テキストデータのロケールIDハンドル"
            Case CF_DIBV5
                FormatName = "CF_DIBV5       : " & "構造体とビットマップビットからなる形式データ(Windows2000)"
        End Select
    Else
        lSize = 255
        sBuf = String$(lSize, 0)
        Ret = Api_GetClipboardFormatName(lFormatId, sBuf, lSize)

        If Ret <> 0 Then
            FormatName = "PRIVATE        : " & Left$(sBuf, Ret)
        Else
            FormatName = "Unknown        : " & Left$(sBuf, Ret)
        End If
    End If
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Ret As Long
    
    List1.Resetcontent

    If (Api_OpenClipboard(GethWnd)) Then
        Ret = Api_EnumClipboardFormats(0)

        If (Ret <> 0) Then
            Do
                List1.AddString FormatName(Ret)
                Ret = Api_EnumClipboardFormats(Ret)
            Loop While Ret <> 0
        End If
    End If

    Ret = Api_CloseClipboard

    Text1.SetWindowText Trim$(Str$(Api_CountClipboardFormats)) & "フォーマット"
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End