关于系统剪贴板CLIPBOARD的问题,高手请进。回答出来另有430分相送

时间:2021-12-21 14:39:36
本人最近用一控件,碰都一个问题。
是关于此控件的数据导出。
偶可以把其结果复制到系统的CLIPBOARD中。
此时假设CLIPBOARD里面的内容如下:
STR1,PIC1,STR2,PIC2。
也就是说是一段文字,一段图片。
这个时候我怎么操作CLIPBOARD。
使得能够在一个IMAGE里面显示PIC2。
如果我用GETDATA()的话,IMAGE里面出来的是PIC1和PIC2。
可以说把他们两张图片合并起来了。
我怎么把他们分开。
要求:不能用WORD等第三方控件。
如果能给我源码就更感激不尽。
能给我解决此问题者我会另开贴子,送满500分。

22 个解决方案

#1


请大虾们帮忙。
随便用什么语言只要提供方确实可行的方法就行

#2


其实我的描述有点错误
你可以假设,CLIPBOARD的内容就是在WORD里面有:STR1,PIC1,STR2,PIC2。
也就是说是一段文字,一段图片,一段文字,一段图片。
这个时候我全选复制后的内容。
这个时候我怎么操作CLIPBOARD。
使得能够在一个IMAGE里面显示PIC2。
如果我用GETDATA()的话,IMAGE里面出来的是STR1,PIC1,STR2,PIC2。

#3


写两次CLIPBOARD,行不?

#4


怎么做??
具体点

#5


很急。。。
另外就是我现在只能把所有的数据一下子倒到剪贴板。
所以只能求教怎么才能把数据拿出来。

#6


试试看,先判断CLIPBOARD中内容的格式,然后再决定你的操作
命令如下:Clipboard.GetFormat(vb常量) 比如:vbCFBitmap是判断是不是一幅图片

#7


Private Sub Command1_Click()
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
End Sub

Private Sub Command2_Click()
Text1.Text = Clipboard.GetText
End Sub

Private Sub Command3_Click()
Clipboard.Clear
End Sub

#8


'给你 一段 对 clipborad 的 操作例子
'放入 .Bas 中

'**************************************
'目的: 获得 All Clipboard Formats
'**************************************


Private Type POINTAPI
    x As Long
    y As Long
    End Type


Private Declare Function EmptyClipboard Lib "user32" () As Long


Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long


Private Declare Function CloseClipboard Lib "user32" () As Long


Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) 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 GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long


Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) 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 Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, source As Any, ByVal Length As Long)


Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long


Private Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
    Private Const CF_TEXT = 1
    Private Const CF_BITMAP = 2
    Private Const CF_METAFILEPICT = 3
    Private Const CF_SYLK = 4
    Private Const CF_DIF = 5
    Private Const CF_TIFF = 6
    Private Const CF_OEMTEXT = 7
    Private Const CF_DIB = 8
    Private Const CF_PALETTE = 9
    Private Const CF_PENDATA = 10
    Private Const CF_RIFF = 11
    Private Const CF_WAVE = 12
    Private Const CF_UNICODETEXT = 13
    Private Const CF_ENHMETAFILE = 14
    Private Const CF_HDROP = 15
    Private Const CF_LOCALE = 16
    Private Const CF_MAX = 17
    Private Const CFSTR_SHELLIDLIST As String = "Shell IDList Array"
    Private Const CFSTR_SHELLIDLISTOFFSET As String = "Shell Object Offsets"
    Private Const CFSTR_NETRESOURCES As String = "Net Resource"
    Private Const CFSTR_FILEDESCRIPTOR As String = "FileGroupDescriptor"
    Private Const CFSTR_FILECONTENTS As String = "FileContents"
    Private Const CFSTR_FILENAME As String = "FileName"
    Private Const CFSTR_PRINTERGROUP As String = "PrinterFriendlyName"
    Private Const CFSTR_FILENAMEMAP As String = "FileNameMap"
    Private Const GMEM_FIXED = &H0
    Private Const GMEM_MOVEABLE = &H2
    Private Const GMEM_NOCOMPACT = &H10
    Private Const GMEM_NODISCARD = &H20
    Private Const GMEM_ZEROINIT = &H40
    Private Const GMEM_MODIFY = &H80
    Private Const GMEM_DISCARDABLE = &H100
    Private Const GMEM_NOT_BANKED = &H1000
    Private Const GMEM_SHARE = &H2000
    Private Const GMEM_DDESHARE = &H2000
    Private Const GMEM_NOTIFY = &H4000
    Private Const GMEM_LOWER = GMEM_NOT_BANKED
    Private Const GMEM_VALID_FLAGS = &H7F72
    Private Const GMEM_INVALID_HANDLE = &H8000
    Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
    Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)
    Private Const APINULL = 0

Public Sub CopyTLP(strText As String, strSylk As String)
    Dim wLenT As Integer
    Dim hMemoryT As Long
    Dim lpMemoryT As Long
    Dim wLenS As Integer
    Dim hMemoryS As Long
    Dim lpMemoryS As Long
    Dim retval As Variant


    If OpenClipboard(APINULL) Then
        Call EmptyClipboard
        wLenT = Len(strText) + 1
        strText = strText & vbNullChar
        hMemoryT = GlobalAlloc(GHND, wLenT + 1)


        If hMemoryT Then
            lpMemoryT = GlobalLock(hMemoryT)
            retval = lstrcpy(lpMemoryT, strText)
            Call GlobalUnlock(hMemoryT)
            retval = SetClipboardData(CF_TEXT, hMemoryT)
        End If
        wLenS = Len(strSylk) + 1
        strSylk = strSylk & vbNullChar
        hMemoryS = GlobalAlloc(GHND, wLenS + 1)


        If hMemoryS Then
            lpMemoryS = GlobalLock(hMemoryS)
            retval = lstrcpy(lpMemoryS, strSylk)
            Call GlobalUnlock(hMemoryS)
            retval = SetClipboardData(CF_SYLK, hMemoryS)
        End If
    End If
    Call CloseClipboard
End Sub


Public Sub CopyText(strText As String)
    'ExecuteCopy strText, CF_TEXT
    Clipboard.GetText vbCFText
End Sub


Public Sub CopyRTF(strText As String)
    'ExecuteCopy strText, CF_TEXT
    Clipboard.GetText vbCFRTF
End Sub


Public Sub CopyOEMText(strText As String)
    ExecuteCopy strText, CF_OEMTEXT
End Sub


Public Sub CopyDIF(strText As String)
    ExecuteCopy strText, CF_DIF
End Sub


Public Sub CopyUNICODETEXT(strText As String)
    ExecuteCopy strText, CF_UNICODETEXT
End Sub


Public Sub CopySYLK(strText As String)
    ExecuteCopy strText, CF_SYLK
End Sub


Public Sub CopyXlTable(strText As String)
    Dim wCBformat As Long
    wCBformat = RegisterClipboardFormat("XlTable")


    If wCBformat <> 0 Then
        ExecuteCopy strText, wCBformat
    End If
End Sub


Public Sub CopyBiff5(strText As String)
    Dim wCBformat As Long
    wCBformat = RegisterClipboardFormat("BIFF5")


    If wCBformat <> 0 Then
        ExecuteCopy strText, wCBformat
    End If
End Sub


Public Sub CopyCsv(strText As String)
    Dim wCBformat As Long
    wCBformat = RegisterClipboardFormat("Csv")


    If wCBformat <> 0 Then
        ExecuteCopy strText, wCBformat
    End If
End Sub


Private Sub ExecuteCopy(strText As String, clipFormat As Long)
    Dim wLen As Integer
    Dim hMemory As Long
    Dim lpMemory As Long
    Dim retval As Variant


    If OpenClipboard(APINULL) Then
        Call EmptyClipboard
        wLen = Len(strText) + 1
        strText = strText & vbNullChar
        hMemory = GlobalAlloc(GHND, wLen + 1)


        If hMemory Then
            lpMemory = GlobalLock(hMemory)
            'Call CopyMem(ByVal lpMemory, strText, w
            '     Len)
            retval = lstrcpy(lpMemory, strText)
            Call GlobalUnlock(hMemory)
            retval = SetClipboardData(clipFormat, hMemory)
        End If
    End If
    Call CloseClipboard
End Sub


Public Function Paste()
    Paste = Clipboard.GetText(1)
End Function


Function CanPaste() As Boolean


    If IsClipboardFormatAvailable(CF_TEXT) Then
        CanPaste = True
    ElseIf IsClipboardFormatAvailable(CF_UNICODETEXT) Then
        CanPaste = True
    ElseIf IsClipboardFormatAvailable(CF_OEMTEXT) Then
        CanPaste = True
    ElseIf IsClipboardFormatAvailable(CF_DIF) Then
        CanPaste = True
    End If
End Function
 
 

#9


你给的不象是我想要的。
不知道还有其他答案么?

#10


你要什么?

#11


你为什么不用Ipicture()指针数组?或者用StdPicture 对象数组?
我认为没必要用Clipboard。
仅供参考。


#12


首先我不知道怎么用。
其次应该这么说。
我的那个控件只有COPYTOCLIPBOARD这个命令。
所以说我只能对CLIPBOARD进行操作。
现在我的CLIPBOARD里面的内容是这样放的:
STR1+PIC1+STR2+PIC2
我要把其中的PIC2拿出来。该怎么办?

#13


sonicdater(发呆呆) 
虽然你的东东没有完全解决我的问题。不过我准备送分给你。
请你帮忙多UP我这里的提问。谢谢大家。
到http://www.csdn.net/Expert/topic/470/470864.shtm去拿分。

#14


还有没有其他高手解决我的问题啊?

#15


用控件数组???
load Image1(1)
..........

#16


我去 了
======
用多个 CLIPBOARD 对象 不行吗? 我没试, 我觉得应该可以.

另外, 我在 问一下 你的 意图, 是否 想 做成 office2000 中的 剪贴板 那样 能 同时 复制 多个 对象 而且 有能 单独 显示 出来?

#17


不是这个意思。
不过现在我决定把我的问题转化为
我有一个RTF格式的文件。
我把它COPY到了CLIPBOARD里面。
我怎么把它从CLIPBOARD里面拿出来?
Clipboard.GetData(&HBF01)或者Clipboard.GetData(vbCFRTF)都不行。

#18


你为什么要这么做?发送Ctrl+V按键不就可以了吗?

#19


你的名字很好,关注!

#20


其实我是调用一个控件。
它有一个过程。
这个过程把它的分析结果COPY到CLIPBOARD中去。
我现在要做的是把结果拿出来,
再整理一下。

#21


Private Declare Function apiSetFocus Lib "user32" Alias "SetFocus" (ByVal hWnd As Long) As Long
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Function OemKeyScan Lib "user32" (ByVal wOemChar As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwflags As Long, ByVal dwExtraInfo As Long)
Const VK_V = 86
Const VK_CONTROL = &H11
Private Sub Command1_Click()
apiSetFocus RichTextBox1.hWnd
        ctrlscan% = MapVirtualKey(VK_CONTROL, 0)
        keybd_event VK_CONTROL, ctrlscan, 0, 0
        
        sc = OemKeyScan(Asc("V"))
        vKey = MapVirtualKey(sc, 1)
            keybd_event vKey, 0, 0, 0
            keybd_event vKey, 0, KEYEVENTF_KEYUP, 0
        
        keybd_event VK_CONTROL, ctrlscan, KEYEVENTF_KEYUP, 0

End Sub

#22


各位,谢谢大家关心。
我已经找到解决的办法了。
有些朋友虽然没有帮我完全解决问题,但是还是一些贴子满有启发的。
现在给两位给我启发的朋友加分

#1


请大虾们帮忙。
随便用什么语言只要提供方确实可行的方法就行

#2


其实我的描述有点错误
你可以假设,CLIPBOARD的内容就是在WORD里面有:STR1,PIC1,STR2,PIC2。
也就是说是一段文字,一段图片,一段文字,一段图片。
这个时候我全选复制后的内容。
这个时候我怎么操作CLIPBOARD。
使得能够在一个IMAGE里面显示PIC2。
如果我用GETDATA()的话,IMAGE里面出来的是STR1,PIC1,STR2,PIC2。

#3


写两次CLIPBOARD,行不?

#4


怎么做??
具体点

#5


很急。。。
另外就是我现在只能把所有的数据一下子倒到剪贴板。
所以只能求教怎么才能把数据拿出来。

#6


试试看,先判断CLIPBOARD中内容的格式,然后再决定你的操作
命令如下:Clipboard.GetFormat(vb常量) 比如:vbCFBitmap是判断是不是一幅图片

#7


Private Sub Command1_Click()
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
End Sub

Private Sub Command2_Click()
Text1.Text = Clipboard.GetText
End Sub

Private Sub Command3_Click()
Clipboard.Clear
End Sub

#8


'给你 一段 对 clipborad 的 操作例子
'放入 .Bas 中

'**************************************
'目的: 获得 All Clipboard Formats
'**************************************


Private Type POINTAPI
    x As Long
    y As Long
    End Type


Private Declare Function EmptyClipboard Lib "user32" () As Long


Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long


Private Declare Function CloseClipboard Lib "user32" () As Long


Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) 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 GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long


Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) 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 Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, source As Any, ByVal Length As Long)


Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long


Private Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
    Private Const CF_TEXT = 1
    Private Const CF_BITMAP = 2
    Private Const CF_METAFILEPICT = 3
    Private Const CF_SYLK = 4
    Private Const CF_DIF = 5
    Private Const CF_TIFF = 6
    Private Const CF_OEMTEXT = 7
    Private Const CF_DIB = 8
    Private Const CF_PALETTE = 9
    Private Const CF_PENDATA = 10
    Private Const CF_RIFF = 11
    Private Const CF_WAVE = 12
    Private Const CF_UNICODETEXT = 13
    Private Const CF_ENHMETAFILE = 14
    Private Const CF_HDROP = 15
    Private Const CF_LOCALE = 16
    Private Const CF_MAX = 17
    Private Const CFSTR_SHELLIDLIST As String = "Shell IDList Array"
    Private Const CFSTR_SHELLIDLISTOFFSET As String = "Shell Object Offsets"
    Private Const CFSTR_NETRESOURCES As String = "Net Resource"
    Private Const CFSTR_FILEDESCRIPTOR As String = "FileGroupDescriptor"
    Private Const CFSTR_FILECONTENTS As String = "FileContents"
    Private Const CFSTR_FILENAME As String = "FileName"
    Private Const CFSTR_PRINTERGROUP As String = "PrinterFriendlyName"
    Private Const CFSTR_FILENAMEMAP As String = "FileNameMap"
    Private Const GMEM_FIXED = &H0
    Private Const GMEM_MOVEABLE = &H2
    Private Const GMEM_NOCOMPACT = &H10
    Private Const GMEM_NODISCARD = &H20
    Private Const GMEM_ZEROINIT = &H40
    Private Const GMEM_MODIFY = &H80
    Private Const GMEM_DISCARDABLE = &H100
    Private Const GMEM_NOT_BANKED = &H1000
    Private Const GMEM_SHARE = &H2000
    Private Const GMEM_DDESHARE = &H2000
    Private Const GMEM_NOTIFY = &H4000
    Private Const GMEM_LOWER = GMEM_NOT_BANKED
    Private Const GMEM_VALID_FLAGS = &H7F72
    Private Const GMEM_INVALID_HANDLE = &H8000
    Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
    Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)
    Private Const APINULL = 0

Public Sub CopyTLP(strText As String, strSylk As String)
    Dim wLenT As Integer
    Dim hMemoryT As Long
    Dim lpMemoryT As Long
    Dim wLenS As Integer
    Dim hMemoryS As Long
    Dim lpMemoryS As Long
    Dim retval As Variant


    If OpenClipboard(APINULL) Then
        Call EmptyClipboard
        wLenT = Len(strText) + 1
        strText = strText & vbNullChar
        hMemoryT = GlobalAlloc(GHND, wLenT + 1)


        If hMemoryT Then
            lpMemoryT = GlobalLock(hMemoryT)
            retval = lstrcpy(lpMemoryT, strText)
            Call GlobalUnlock(hMemoryT)
            retval = SetClipboardData(CF_TEXT, hMemoryT)
        End If
        wLenS = Len(strSylk) + 1
        strSylk = strSylk & vbNullChar
        hMemoryS = GlobalAlloc(GHND, wLenS + 1)


        If hMemoryS Then
            lpMemoryS = GlobalLock(hMemoryS)
            retval = lstrcpy(lpMemoryS, strSylk)
            Call GlobalUnlock(hMemoryS)
            retval = SetClipboardData(CF_SYLK, hMemoryS)
        End If
    End If
    Call CloseClipboard
End Sub


Public Sub CopyText(strText As String)
    'ExecuteCopy strText, CF_TEXT
    Clipboard.GetText vbCFText
End Sub


Public Sub CopyRTF(strText As String)
    'ExecuteCopy strText, CF_TEXT
    Clipboard.GetText vbCFRTF
End Sub


Public Sub CopyOEMText(strText As String)
    ExecuteCopy strText, CF_OEMTEXT
End Sub


Public Sub CopyDIF(strText As String)
    ExecuteCopy strText, CF_DIF
End Sub


Public Sub CopyUNICODETEXT(strText As String)
    ExecuteCopy strText, CF_UNICODETEXT
End Sub


Public Sub CopySYLK(strText As String)
    ExecuteCopy strText, CF_SYLK
End Sub


Public Sub CopyXlTable(strText As String)
    Dim wCBformat As Long
    wCBformat = RegisterClipboardFormat("XlTable")


    If wCBformat <> 0 Then
        ExecuteCopy strText, wCBformat
    End If
End Sub


Public Sub CopyBiff5(strText As String)
    Dim wCBformat As Long
    wCBformat = RegisterClipboardFormat("BIFF5")


    If wCBformat <> 0 Then
        ExecuteCopy strText, wCBformat
    End If
End Sub


Public Sub CopyCsv(strText As String)
    Dim wCBformat As Long
    wCBformat = RegisterClipboardFormat("Csv")


    If wCBformat <> 0 Then
        ExecuteCopy strText, wCBformat
    End If
End Sub


Private Sub ExecuteCopy(strText As String, clipFormat As Long)
    Dim wLen As Integer
    Dim hMemory As Long
    Dim lpMemory As Long
    Dim retval As Variant


    If OpenClipboard(APINULL) Then
        Call EmptyClipboard
        wLen = Len(strText) + 1
        strText = strText & vbNullChar
        hMemory = GlobalAlloc(GHND, wLen + 1)


        If hMemory Then
            lpMemory = GlobalLock(hMemory)
            'Call CopyMem(ByVal lpMemory, strText, w
            '     Len)
            retval = lstrcpy(lpMemory, strText)
            Call GlobalUnlock(hMemory)
            retval = SetClipboardData(clipFormat, hMemory)
        End If
    End If
    Call CloseClipboard
End Sub


Public Function Paste()
    Paste = Clipboard.GetText(1)
End Function


Function CanPaste() As Boolean


    If IsClipboardFormatAvailable(CF_TEXT) Then
        CanPaste = True
    ElseIf IsClipboardFormatAvailable(CF_UNICODETEXT) Then
        CanPaste = True
    ElseIf IsClipboardFormatAvailable(CF_OEMTEXT) Then
        CanPaste = True
    ElseIf IsClipboardFormatAvailable(CF_DIF) Then
        CanPaste = True
    End If
End Function
 
 

#9


你给的不象是我想要的。
不知道还有其他答案么?

#10


你要什么?

#11


你为什么不用Ipicture()指针数组?或者用StdPicture 对象数组?
我认为没必要用Clipboard。
仅供参考。


#12


首先我不知道怎么用。
其次应该这么说。
我的那个控件只有COPYTOCLIPBOARD这个命令。
所以说我只能对CLIPBOARD进行操作。
现在我的CLIPBOARD里面的内容是这样放的:
STR1+PIC1+STR2+PIC2
我要把其中的PIC2拿出来。该怎么办?

#13


sonicdater(发呆呆) 
虽然你的东东没有完全解决我的问题。不过我准备送分给你。
请你帮忙多UP我这里的提问。谢谢大家。
到http://www.csdn.net/Expert/topic/470/470864.shtm去拿分。

#14


还有没有其他高手解决我的问题啊?

#15


用控件数组???
load Image1(1)
..........

#16


我去 了
======
用多个 CLIPBOARD 对象 不行吗? 我没试, 我觉得应该可以.

另外, 我在 问一下 你的 意图, 是否 想 做成 office2000 中的 剪贴板 那样 能 同时 复制 多个 对象 而且 有能 单独 显示 出来?

#17


不是这个意思。
不过现在我决定把我的问题转化为
我有一个RTF格式的文件。
我把它COPY到了CLIPBOARD里面。
我怎么把它从CLIPBOARD里面拿出来?
Clipboard.GetData(&HBF01)或者Clipboard.GetData(vbCFRTF)都不行。

#18


你为什么要这么做?发送Ctrl+V按键不就可以了吗?

#19


你的名字很好,关注!

#20


其实我是调用一个控件。
它有一个过程。
这个过程把它的分析结果COPY到CLIPBOARD中去。
我现在要做的是把结果拿出来,
再整理一下。

#21


Private Declare Function apiSetFocus Lib "user32" Alias "SetFocus" (ByVal hWnd As Long) As Long
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Function OemKeyScan Lib "user32" (ByVal wOemChar As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwflags As Long, ByVal dwExtraInfo As Long)
Const VK_V = 86
Const VK_CONTROL = &H11
Private Sub Command1_Click()
apiSetFocus RichTextBox1.hWnd
        ctrlscan% = MapVirtualKey(VK_CONTROL, 0)
        keybd_event VK_CONTROL, ctrlscan, 0, 0
        
        sc = OemKeyScan(Asc("V"))
        vKey = MapVirtualKey(sc, 1)
            keybd_event vKey, 0, 0, 0
            keybd_event vKey, 0, KEYEVENTF_KEYUP, 0
        
        keybd_event VK_CONTROL, ctrlscan, KEYEVENTF_KEYUP, 0

End Sub

#22


各位,谢谢大家关心。
我已经找到解决的办法了。
有些朋友虽然没有帮我完全解决问题,但是还是一些贴子满有启发的。
现在给两位给我启发的朋友加分