liumailong 发表于 2010-12-24 20:51:48

如何不用键盘模拟,实现 CTRL+C 的复制功能

本帖最后由 liumailong 于 2010-12-25 15:10 编辑

我指的复制是一般说的 CTRL+C 或鼠标右键菜单的复制

既复制光标或鼠标所选到剪切板。

比如:在文件夹中复制,粘贴出来的是文件夹,
         在网页中复制,粘贴出来有完整的图文格式(当然要被粘贴的程序支持)

这个如何在不用键盘模拟的情况下,实现?

蜘蛛抱蛋 发表于 2010-12-24 21:07:20

已经是快捷键了,你还想怎么实现呢?

ceoguang 发表于 2010-12-24 22:37:05

LS误解了LZ的意思.
其实windows资源管理器中集成的CTRL+C是调用EM_GETSEL.
具体见MSDNhttp://msdn.microsoft.com/zh-cn/library/aa453012(en-us).aspx

tryhi 发表于 2010-12-25 01:20:36

好复杂,不知如何实现

5i5wei 发表于 2010-12-26 14:18:08

msdn 上好像有 你自己查查吧

chenronting 发表于 2010-12-26 17:22:27

回复 3# ceoguang


    版主大大, 最好弄个例子出来~这里可都是新手啊~呵呵,感谢、

tryhi 发表于 2010-12-26 21:30:31

支持一下楼上,msdn?一听就知道是一个很复杂很复杂的东西

fhp2009 发表于 2010-12-28 23:10:37

我给补上部分的代码哈

这个是来自edit控件

Func _GUICtrlEdit_GetSel($hWnd)
        If $Debug_Ed Then __UDF_ValidateClassName($hWnd, $__EDITCONSTANT_ClassName)
        If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)

        Local $aSel
        Local $wparam = DllStructCreate("uint Start")
        Local $lparam = DllStructCreate("uint End")
        _SendMessage($hWnd, $EM_GETSEL, DllStructGetPtr($wparam), DllStructGetPtr($lparam), 0, "ptr", "ptr")
        $aSel = DllStructGetData($wparam, "Start")
        $aSel = DllStructGetData($lparam, "End")
        Return $aSel
EndFunc   ;==>_GUICtrlEdit_GetSel
获得edit控件的数据实际上是向他发送了ME_SETSEL消息,这样就自动复制了。其他控件也如此,对于进程外的诸如控件等用钩子,或者获得其资源句柄,然后发送这个消息即可。

19377708 发表于 2010-12-29 05:19:40

支持下!等待高手解答!

fhp2009 发表于 2010-12-29 11:37:06

autoit对文件及文件夹复制有filecopy函数,也可调用系统FILE SYSTEM OBJET接口,filecopy foldercopy

fhp2009 发表于 2010-12-29 11:38:13

autoit对文件及文件夹复制有filecopy函数,也可调用系统FILE SYSTEM OBJET接口,filecopy foldercopy

_ddqs. 发表于 2010-12-29 18:14:48

高深的写不来,不想手按就用代码自动操作!(选择的还是要手动定位)
Send("{PRINTSCREEN}")

While 1

       
        Send("^c")
        $ClipGet = ClipGet()
       
        If @error<>1 And @error<>3 And @error<>4 Then
               
                If @error = 2 Then
                        Run("mspaint.exe", @MyDocumentsDir, @SW_MAXIMIZE)
                Else
                        Run("Notepad.exe", @MyDocumentsDir, @SW_MAXIMIZE)
                EndIf
                Sleep(1000)
                If StringInStr(WinGetTitle("",""), "记事本") > 0 Or StringInStr(WinGetTitle("",""), "画图") > 0 Then
                        Send("^v")
                        Sleep(2000)
                        Send("!{F4}")
                        Send("!{n}")
                       
                        ClipPut("")
                       
                EndIf
       
        EndIf


        Sleep(3000)
WEnd

fhp2009 发表于 2010-12-29 18:16:20

这个是在磁盘中点击文件或文件夹即将文件或文件夹自动复制到指定目录。
http://www.autoitx.com/thread-20816-1-1.html

fhp2009 发表于 2010-12-29 18:17:03

剪贴板的呢在论坛找找,应该有,或者等改天我再写

_ddqs. 发表于 2010-12-29 18:27:59

键盘模拟是一个拷贝动作
不使用键盘模拟也是一个拷贝动作
不使用键盘模拟的拷贝动作可能需要各种程序的控件接口用于去发送该动作消息(可能?)
页: [1]
查看完整版本: 如何不用键盘模拟,实现 CTRL+C 的复制功能