api函数EnumClipboardFormats可以枚举剪贴板中已有的数据格式,它的语法如下:
UINT WINAPI EnumClipboardFormats( _In_ UINT format );
当第一次调用EnumClipboardFormats函数时,把format参数设置为0,它的返回值为剪贴板中第一个数据格式,如果剪贴板中没有数据,则返回0。如果要继续枚举其它的剪贴板数据格式,则把format参数设置为上次的函数返回值,直到枚举结束,EnumClipboardFormats函数的返回值为0。
剪贴板中可以存放各种各样的数据,它们都有着对应的格式,如果要查看剪贴板中已有的数据格式,可以使用如下的vba代码:
Declare Function EnumClipboardFormats Lib "user32" (ByVal wFormat As Long) As Long Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long Declare Function CloseClipboard Lib "user32" () As Long Enum ClipboardFormats CF_TEXT = 1 CF_BITMAP = 2 CF_METAFILEPICT = 3 CF_SYLK = 4 CF_DIF = 5 CF_TIFF = 6 CF_OEMTEXT = 7 CF_DIB = 8 CF_PALETTE = 9 CF_PENDATA = 10 CF_RIFF = 11 CF_WAVE = 12 CF_UNICODETEXT = 13 CF_ENHMETAFILE = 14 CF_HDROP = 15 CF_LOCALE = 16 CF_DIBV5 = 17 CF_OWNERDISPLAY = &H80 CF_DSPTEXT = &H81 CF_DSPBITMAP = &H82 CF_DSPMETAFILEPICT = &H83 CF_DSPENHMETAFILE = &H8E CF_GDIOBJFIRST = &H300 CF_PRIVATEFIRST = &H200 CF_PRIVATELAST = &H2FF CF_GDIOBJLAST = &H3FF End Enum Sub QQ1722187970() Dim iFormat OpenClipboard (0) iFormat = EnumClipboardFormats(0) Debug.Print iFormat Do Until iFormat = 0 iFormat = EnumClipboardFormats(iFormat) Debug.Print iFormat Loop CloseClipboard End Sub
当我们复制一个excel单元格内容到剪贴板时,使用以上的代码枚举剪贴板的格式,发现会出来一串格式,并不是我们想象中的只有一种数据格式,这是因为剪贴板是用于在应用程序之间或者应用程序内部交换数据的,它存放一个数据内容时,会存放与这个数据内容相关的尽可能多的数据格式,这样就便于其它应用程序访问。
比如word里面的字符数据是有格式的,但是记事本里面的字符数据是没有格式。所以当在word中复制数据时,它会往剪贴板中粘贴这个数据的各种数据格式,其中第一个是包含有这个数据最多信息的数据格式(带了word格式),然后是逐渐减少信息的数据格式,这样当记事本获取剪贴板数据时,就只寻找自己可以接受的数据格式即可。
发表评论