下面是具体的代码: Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const WM_PASTE = &H302Private Sub Command1_Click() Clipboard.SetData LoadPicture("c:\1.bmp") 'Clipboard就是剪切板 SendMessage RichTextBox1.hwnd, WM_PASTE, ByVal 0&, ByVal 0& ' End Sub 各位哥哥,姐姐,你们说不用剪切板改怎么做,请你们写出具体代码,再次感谢各位哥哥,姐姐!!
这100分我来拿吧:)简单写了写,代码如下:Option ExplicitPrivate Declare Function SetClipboardViewer Lib "user32.dll" ( _ ByVal hwnd As Long) As Long Private Const WM_DRAWCLIPBOARD As Long = &H308Dim WithEvents objSC As cSubclassPrivate Sub Command1_Click() Me.Tag = 1 Clipboard.Clear Clipboard.SetText Text1.Text Me.Tag = 0 End SubPrivate Sub Command2_Click() Me.Tag = 1 Clipboard.Clear Clipboard.SetText Text2.Text Me.Tag = 0 End SubPrivate Sub Form_Load() Call SetClipboardViewer(Me.hwnd) '添加本句柄到剪贴板查看器列表 Set objSC = New cSubclass
objSC.AddWindowMsgs Me.hwnd End SubPrivate Sub Form_Unload(Cancel As Integer) objSC.DeleteWindowMsg Me.hwnd Set objSC = Nothing End SubPrivate 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 界面:工程打包下载:http://www.m5home.com/blog/article.asp?id=321
Option Explicit '剪贴板监视与管理示例代码 'BY 嗷嗷叫的老马 'http://www.m5home.comPrivate Declare Function SetClipboardViewer Lib "user32.dll" ( _ ByVal hwnd As Long) As Long Private Const WM_DRAWCLIPBOARD As Long = &H308Dim WithEvents objSC As cSubclass Dim objSave1 As StdPicture, objSave2 As StdPicturePrivate Sub Command1_Click() Me.Tag = 1 Clipboard.Clear Clipboard.SetData objSave1 Me.Tag = 0 End SubPrivate Sub Command2_Click() Me.Tag = 1 Clipboard.Clear Clipboard.SetData objSave2 Me.Tag = 0 End SubPrivate Sub Form_Load() Call SetClipboardViewer(Me.hwnd) '添加本句柄到剪贴板查看器列表 Set objSC = New cSubclass
objSC.AddWindowMsgs Me.hwnd End SubPrivate Sub Form_Unload(Cancel As Integer) objSC.DeleteWindowMsg Me.hwnd Set objSC = Nothing End SubPrivate 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) = False And Me.Tag <> "1" Then '只对文本进行处理,自己复制时不处理 If Option1.Value Then Set objSave1 = Clipboard.GetData If Option2.Value Then Set objSave2 = Clipboard.GetData End If End Select End If End Sub 用法还是一样,不过界面的文本框无作用了.Me.Tag = 1,我是懒得再声明一个变量.....直接用这个附加属性来当锁,以防自己在使用剪贴板时又被自己给拦截了(注意If Clipboard.GetFormat(vbCFText) = False And Me.Tag <> "1" Then这句)如果没这个锁,功能会混乱....虽然还是可以通过写别的代码来处理,但不如加个锁方便.
然后写一个类或API函数作为与那个NT服务程序沟通的桥,当你需要读写你的
剪切板内容的时候,调用你的API或类来处理不就可以了。但是这么做我认为
意义不大。
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_PASTE = &H302Private Sub Command1_Click()
Clipboard.SetData LoadPicture("c:\1.bmp") 'Clipboard就是剪切板
SendMessage RichTextBox1.hwnd, WM_PASTE, ByVal 0&, ByVal 0& '
End Sub
各位哥哥,姐姐,你们说不用剪切板改怎么做,请你们写出具体代码,再次感谢各位哥哥,姐姐!!
ByVal hwnd As Long) As Long
Private Const WM_DRAWCLIPBOARD As Long = &H308Dim WithEvents objSC As cSubclassPrivate Sub Command1_Click()
Me.Tag = 1
Clipboard.Clear
Clipboard.SetText Text1.Text
Me.Tag = 0
End SubPrivate Sub Command2_Click()
Me.Tag = 1
Clipboard.Clear
Clipboard.SetText Text2.Text
Me.Tag = 0
End SubPrivate Sub Form_Load()
Call SetClipboardViewer(Me.hwnd) '添加本句柄到剪贴板查看器列表
Set objSC = New cSubclass
objSC.AddWindowMsgs Me.hwnd
End SubPrivate Sub Form_Unload(Cancel As Integer)
objSC.DeleteWindowMsg Me.hwnd
Set objSC = Nothing
End SubPrivate 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
界面:工程打包下载:http://www.m5home.com/blog/article.asp?id=321
'剪贴板监视与管理示例代码
'BY 嗷嗷叫的老马
'http://www.m5home.comPrivate Declare Function SetClipboardViewer Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Const WM_DRAWCLIPBOARD As Long = &H308Dim WithEvents objSC As cSubclass
Dim objSave1 As StdPicture, objSave2 As StdPicturePrivate Sub Command1_Click()
Me.Tag = 1
Clipboard.Clear
Clipboard.SetData objSave1
Me.Tag = 0
End SubPrivate Sub Command2_Click()
Me.Tag = 1
Clipboard.Clear
Clipboard.SetData objSave2
Me.Tag = 0
End SubPrivate Sub Form_Load()
Call SetClipboardViewer(Me.hwnd) '添加本句柄到剪贴板查看器列表
Set objSC = New cSubclass
objSC.AddWindowMsgs Me.hwnd
End SubPrivate Sub Form_Unload(Cancel As Integer)
objSC.DeleteWindowMsg Me.hwnd
Set objSC = Nothing
End SubPrivate 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) = False And Me.Tag <> "1" Then '只对文本进行处理,自己复制时不处理
If Option1.Value Then Set objSave1 = Clipboard.GetData
If Option2.Value Then Set objSave2 = Clipboard.GetData
End If
End Select
End If
End Sub
用法还是一样,不过界面的文本框无作用了.Me.Tag = 1,我是懒得再声明一个变量.....直接用这个附加属性来当锁,以防自己在使用剪贴板时又被自己给拦截了(注意If Clipboard.GetFormat(vbCFText) = False And Me.Tag <> "1" Then这句)如果没这个锁,功能会混乱....虽然还是可以通过写别的代码来处理,但不如加个锁方便.