说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

发现剪帖板的秘密 -VB资料

HTML文档下载 WORD文档下载 PDF文档下载
发现剪帖板的秘密 -VB资料
概述
Windows 中的Ctrl+C 和Ctrl+V 大家应该很熟悉了, 但是您知道剪帖板里有啥? 举个例子, 在 IE4中选一段东东,按Ctrl+C, 然后在FrontPage 中按Ctrl+V, 您选的东东完整地拷贝到了FrontPage 中, 字体, 颜色等等。 明显, 剪帖板中一定包含了Html 信息, 而如果我们在编程也要得到这些信息, 该怎么办呢?

本文提供了两种技巧, 一是如何得到关于剪贴格式的名称, 一是如何用文本格式显示剪贴版中特定剪贴格式内容。

在我们的第一个演示中, 利用一个很笨的方法来得到 Html 剪贴格式的名称。 GetClipboardFormatName 可以由剪贴板的ID 得到该格式的名称, 于是用一个循环来查找所有包含Html 文字的格式。

在第二个例子中, 我们使用了在例子一中得到的名称, 把在 IE4 中剪贴的Html 内容合并到一个 TextBox 中, 好让我们知道里面有什么样的信息。

实现步骤
例子一 得到剪贴格式的名称
1 新建一个工程。

2 在工程中增加一个命令按钮(Command1)。

3 增加下面的代码:

Private Declare Function GetClipboardFormatName Lib "user32" Alias "GetClipboardFormatNameA" (ByVal wFormat As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long

Private Sub Command1_Click()
Dim FormatID As Long
Dim BufferLen As Long
Dim Buffer As String * 80
For FormatID = 50000 To 60000 '一般有效的 ID 在该区内
BufferLen = GetClipboardFormatName(FormatID, Buffer, 80)
If BufferLen > 0 Then
If InStr(UCase(Left(Buffer, BufferLen)), "HTML") > 0 Then MsgBox FormatID & ":" & Buffer
End If
Next
End Sub


4 运行该程序, 可以发现多个带 Html 的格式名称, 经过测试,HTML Format是我们要找的。 注意: 没有 IE4 的话, 可以使用 RTF 进行查询, 以查看 RichText 的剪贴内容。

例子二 得到 IE4 的剪贴内容
1 新建一个工程。

2 在工程中增加一个命令按钮(Command1), 一个TextBox(Text1), 允许多行显示。

3 增加下面的代码:

Private Declare Function OpenClipboard Lib "USER32" (ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "USER32" () As Long
Private Declare Function GetClipboardData Lib "USER32" (ByVal wFormat As Long) As Long
Private Declare Function IsClipboardFormatAvailable Lib "USER32" (ByVal wFormat As Long) As Long
Private Declare Function RegisterClipboardFormat Lib "USER32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

Public Function GetClipboardIDForCustomFormat(ByVal sName As String) As Long
Dim wFormat As Long
wFormat = RegisterClipboardFormat(sName & Chr$(0))
If (wFormat > &HC000&) Then
GetClipboardIDForCustomFormat = wFormat
End If
End Function

Public Function GetClipboardDataAsString(ByVal hWndOwner As Long, ByVal lFormatID As Long) As String
Dim bData() As Byte
Dim hMem As Long
Dim lSize As Long
Dim lPtr As Long

If (OpenClipboard(hWndOwner)) Then
If (IsClipboardFormatAvailable(lFormatID) <> 0) Then
hMem = GetClipboardData(lFormatID)
If (hMem <> 0) Then
lSize = GlobalSize(hMem)
If (lSize > 0) Then
lPtr = GlobalLock(hMem)
If (lPtr <> 0) Then
ReDim bData(0 To lSize - 1) As Byte
CopyMemory bData(0), ByVal lPtr, lSize
GlobalUnlock hMem

GetClipboardDataAsString = StrConv(bData, vbUnicode)

End If
End If
End If
End If
CloseClipboard
End If

End Function


Private Sub Command1_Click()
Dim lID As Long
Dim sText As String

' 如果没有 IE4,可以使用 "RTF Format"
lID = GetClipboardIDForCustomFormat("HTML Format")
If (lID <> 0) Then
sText = GetClipboardDataAsString(Me.hWnd, lID)
Text1.Text = sText
End If

End Sub

4 运行该程序。 在IE4 中选任意的东东, 按Ctrl+C, 然后按 Command1, 可以在Text1 中看到如下的内容, 汉字显示问题与 GetClipboardDataAsString = StrConv(bData, vbUnicode) 有关:

Version:1.0
StartHTML:000000213
EndHTML:000000863
StartFragment:000000758
EndFragment:000000772
StartSelection:000000758
EndSelection:000000772
SourceURL:file://G:\FrontPage Webs\Content\vbtt\download.htm

... ...

大数据处理分析的六大最好工具 微软:Windows Phone开发者可回复用户评价 不断缩水后的微博上市首日大涨19% 曾一度涨超40% Snapdragon LLVM编译器全新升级 支持骁龙64位处理器 EDP:基于Node.JS与NPM的企业级开发平台 修改主页! Windows Media Player怎么进行文件分割?? 我用WEB TEXTBOX把一条新闻发布。可是它没有格式。大家有招吗? 如何实现网络打印?? linux 运行一段时间后,网络中断 怎样能得到ResultSet返回的记录数目 一个定位new操作符的问题 新手求救!!!! excel 的三個超難問題.歡迎大家來挑戰 我的中文名怎么改成香港那些英文名字?赵思婷 cha chioa或者chao是赵的英文翻译,可是音标是什 请问景如的英文名字怎么取?我的姓是Chao.我的是 盐酸、硫酸、硝酸等酸的纯净物是什么样的?八角晶体, 除王水外最强的酸.硫酸 硝酸 盐酸 中最强的酸三强 3x-7>5x-2,2x+11>3x+5. 铜和硝酸硫酸混合酸反应在100ml混合酸的溶液中, 硝酸和硫酸的混合酸与铜粉反应反应顺序是什么那如果一 李焯雄怎么读 中国军工产业向全球进军 开始与西方竞美媒称土购中国导弹或是把特洛伊木马塞德国就默克尔手机或被美监听一事召见美美国情报机构被爆监听35名国际政要电俄要求美与“俄机构在美招募间谍”指控荷坳长江埔路没有路灯留住人才方能逆袭用工荒两年23亿投公办幼儿园能分一杯羹给民环湖小径成了自家院子?关闭?改造?公园会所命运人大审议决定永掌神权史上最牛奸商韩娱之希爵巫界之树天外重生者军峰山旅游叶尔羌汗国王陵旅游奥依塔克森林公园旅游东方红游乐园旅游泽普旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘