剪贴板的监视,需要先使用SetClipboardViewer设置某个句柄为剪贴板查看器的一员.
然后当剪贴板发生改变时,系统就会向这个句柄发送WM_DRAWCLIPBOARD消息.
只要使用子类化拦截到这个消息即可.
然后当剪贴板发生改变时,系统就会向这个句柄发送WM_DRAWCLIPBOARD消息.
只要使用子类化拦截到这个消息即可.
界面:
程序代码: |
Option Explicit
'剪贴板监视与管理示例代码
'BY 嗷嗷叫的老马
' http://www.m5home.com
Private Declare Function SetClipboardViewer Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Const WM_DRAWCLIPBOARD As Long = &H308
Dim WithEvents objSC As cSubclass
Private Sub Command1_Click()
Me.Tag = 1
Clipboard.Clear
Clipboard.SetText Text1.Text
Me.Tag = 0
End Sub
Private Sub Command2_Click()
Me.Tag = 1
Clipboard.Clear
Clipboard.SetText Text2.Text
Me.Tag = 0
End Sub
Private Sub Form_Load()
Call SetClipboardViewer(Me.hwnd) '添加本句柄到剪贴板查看器列表
Set objSC = New cSubclass
objSC.AddWindowMsgs Me.hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
objSC.DeleteWindowMsg Me.hwnd
Set objSC = Nothing
End Sub
Private Sub objSC_MsgCome(ByVal bBefore As Boolean, bHandled As Boolean, lReturn As Long, lng_hWnd As Long, uMsg As Long, wParam As Long, lParam As Long)
If bBefore Then
Select Case uMsg
Case WM_DRAWCLIPBOARD '剪贴板被改变
If Clipboard.GetFormat(vbCFText) And Me.Tag <> "1" Then '只对文本进行处理,自己复制时不处理
If Option1.Value Then Text1.Text = Clipboard.GetText
If Option2.Value Then Text2.Text = Clipboard.GetText
End If
End Select
End If
End Sub
'剪贴板监视与管理示例代码
'BY 嗷嗷叫的老马
' http://www.m5home.com
Private Declare Function SetClipboardViewer Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Const WM_DRAWCLIPBOARD As Long = &H308
Dim WithEvents objSC As cSubclass
Private Sub Command1_Click()
Me.Tag = 1
Clipboard.Clear
Clipboard.SetText Text1.Text
Me.Tag = 0
End Sub
Private Sub Command2_Click()
Me.Tag = 1
Clipboard.Clear
Clipboard.SetText Text2.Text
Me.Tag = 0
End Sub
Private Sub Form_Load()
Call SetClipboardViewer(Me.hwnd) '添加本句柄到剪贴板查看器列表
Set objSC = New cSubclass
objSC.AddWindowMsgs Me.hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
objSC.DeleteWindowMsg Me.hwnd
Set objSC = Nothing
End Sub
Private Sub objSC_MsgCome(ByVal bBefore As Boolean, bHandled As Boolean, lReturn As Long, lng_hWnd As Long, uMsg As Long, wParam As Long, lParam As Long)
If bBefore Then
Select Case uMsg
Case WM_DRAWCLIPBOARD '剪贴板被改变
If Clipboard.GetFormat(vbCFText) And Me.Tag <> "1" Then '只对文本进行处理,自己复制时不处理
If Option1.Value Then Text1.Text = Clipboard.GetText
If Option2.Value Then Text2.Text = Clipboard.GetText
End If
End Select
End If
End Sub
VB部分相关文章推荐