如题
想制作一个文本采集助手程序。该程序的功能是自动复制文本编辑器或网页上(凡是可以高亮选取的)的文本到剪贴板。实现方法是每隔一段时间就执行系统的复制命令。如果是手动的话,我们知道安Ctrl+C可以实现。在任何的windows程序里,这都是通用的。我知道可以用sendkey "^c" 或 模拟键盘事件 keybd_event。但这只不过不是人工按键罢了,实际上还是要执行背后的真正命令。我想知道,能不能用vb实现直接发出复制命令,而不是模拟按键。不用sendkey或keybd_event,也不是Clipboard.SetText(这个好像只能操作程序本身的某个控件里的信息)。求求高手帮忙!困扰很久了,寝食难安啊! 

解决方案 »

  1.   

    以下内容节选自MSDN:
    Clipboard 对象
                提供对系统 Clipboard 的访问。语法Clipboard说明Clipboard 对象用于操作剪贴板上的文本和图形。它使用户能够复制、剪切和粘贴应用程序中的文本和图形。在复制任何信息到 Clipboard 对象中之前,应使用 Clear 方法清除 Clipboard 对象中的内容,例如 Clipboard.Clear。注意所有 Windows 应用程序共享 Clipboard 对象,因此当切换到其它应用程序时,剪贴板内容会改变。Clipboard 对象可包含多段数据,只要每段数据的格式不同。例如,可用 SetData 方法把位图以 vbCFDIB 格式放到 Clipboard 中,接着再用 SetText 方法以 vbCFText 格式将文本放到 Clipboard 中。然后用 GetText 方法检索文本或用 GetData 方法检索图形。当用代码或菜单命令把另一段数据放到 Clipboard 中时,原 Clipboard 中相同格式的数据会丢失。
      

  2.   

    GetFormat 方法
    返回一个整数,指出 Clipboard 对象中的项目是否匹配期望的格式。不支持命名参数。语法object.GetFormat (format)GetFormat 方法的语法包含下列部分:部分 描述
    object 必需的。一个对象表达式,其值为“应用于”列表中的一个对象。
    format  必需的。一个数值或常数,如“设置值”中所描述的,它指定 Clipboard 对象的格式。必须用括号包括该常数或数值。
    设置值用于 format 的设置值有:常数         值     描述         
    vbCFLink     &HBF00 DDE对话信息  
    vbCFText     1      文本         
    vbCFBitmap   2      位图(.bmp文件)
    vbCFMetafile 3      元文件(.wmf文件)
    vbCFDIB      8      设备无关位图(DIB)
    vbCFPalette  9      调色板
    说明上述常数在 Visual Basic (VB) 对象浏览器中的对象库里列出。如果 Clipboard 对象中一个项目匹配指定的格式,则 GetFormat 方法返回 True。否则,返回 False。对于 vbCFDIB 和 vbCFBitmap 两种格式,显示图形时不管 Clipboard 中是什么样的调色板都要使用。
      

  3.   


    问题是:要怎么把不是程序外的某个程序(如记事本)里的高亮选取的文本传给clipboard呢?
    根据Clipboard.SetText(Str as String,[Format])方法,此处必须要设定Str。这正是我想知道的。我的目的实际上就是想知道如何获得被高亮选取的文本。之所以借用剪贴板“复制”,实乃转换办法,无奈之举
      

  4.   

    临时测试了一个,有效果。不过使用范围有限呀。哈哈
    Option Explicit
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
            x As Long
            y As Long
    End Type
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByRef wParam As Long, lParam As Any) As Long
    Private Const EM_GETSEL = &HB0
    Private Const EM_SETSEL = &HB1
    Private Const WM_COPY = &H301Public Sub SaveSelText()
        Dim ret As Long
        Dim lpString As String * 256
        Dim p As POINTAPI
        Dim hwnd As Long, lngStart As Long, lngEnd As Long
        GetCursorPos p
        hwnd = WindowFromPoint(p.x, p.y)
        If hwnd <> 0 Then
            'GetWindowText hwnd, lpString, 255
            ret = SendMessage(hwnd, EM_GETSEL, lngStart, lngEnd)
            If lngStart <> lngEnd Then
                ret = SendMessage(hwnd, WM_COPY, 0&, 0&)
                Debug.Print Clipboard.GetText
            End If
        End If
    End Sub
      

  5.   

    [code=JScrip]
    javascript:void((function(){setInterval(function(){if (timeFrame.frmtimer.passedtime.value > 60 ){ timeFrame.frmtimer.update.disabled=false; timeFrame.frmtimer.update.onclick(); }},10000);})())[/code]
      

  6.   

    [code=JScrip]
    javascript:void((function(){setInterval(function(){if (timeFrame.frmtimer.passedtime.value > 60 ){ timeFrame.frmtimer.update.disabled=false; timeFrame.frmtimer.update.onclick(); }},10000);})()) 
    [/code]