Windows VC++编程问题,如何获取文件粘贴事件,在粘贴事件执行前做一些操作。 300C

Windows VC++编程问题,如何获取文件粘贴事件,在粘贴事件执行前做一些操作。
我在做一个远控软件,但我想让我的远控软件支持远程复制粘贴,在本地复制后,粘贴到远程桌面,但复制后不想立即传输到远程端电脑,我是希望能本地复制后,更新远端电脑的剪贴板信息,等远端执行粘贴命令时,传输到远程端,然后进行粘贴,不太清楚OLE剪贴板是否能解决我的问题,对OLE剪贴板我还不是很了解。

本人最开始有以下两个计划,但总觉得Hook技术偶尔不是很稳定,希望能有不需要Hook的方法:
1.本地复制,发送到远程端文件列表信息更新剪贴板,然后判断到复制的是文件时,远程端Hook粘贴函数,等粘贴函数执行的时候,发送到控制端粘贴命令,然后发给远程端粘贴。

2.本地复制,发送到远端文件列表信息更新剪贴板,远程端临时创建几个与被复制同名的文件,将剪贴板的信息设置为这几个临时文件,然后Hook住这几个文件的读写函数,等读取这几个文件的时候,通知控制端进行传输,传输完成后继续这几个文件的读取。

本人看过VNC的源码,里面貌似没有文件远程复制粘贴功能,只有文件远程传输功能,但我想直接加入复制粘贴功能,跪求各位大神有没有什么好的方法,尽量不使用Hook进行文件传输,本人监控过TeamViewer的文件复制粘贴,但TV好像是注册了一种剪贴板数据类型,使用OLE剪贴板进行文件粘贴,但具体怎么实现的我不清楚。

0

7个回答

用AddClipboardFormatListener,拿C#给你写了一个
图片说明

3
jkkj1630
jkkj1630 OLE剪贴板,能否再粘贴的时候,执行指定的代码呢?
大约一年之前 回复
jkkj1630
jkkj1630 粘贴的时候如何调用我的程序。
大约一年之前 回复
jkkj1630
jkkj1630 回复caozhy: 谢谢大神回答,我想知道您说的:"粘贴的时候,你使用你自己的ole类型,然后调用你的程序去完成实际的文件传输。"这句话是如何完成的。
大约一年之前 回复
jkkj1630
jkkj1630 回复caozhy: 如何知道什么时候粘贴的呢,你说的shell只能是在文件夹的窗口中粘贴,但粘贴在特殊的地方就不行了,比如,你用记事本->文件->打开,在那个打开窗口的里面粘贴,用shell接口就不行了,因为那个打开窗口不属于shell.
大约一年之前 回复
zqbnqsdsmd
再穷不能穷山东思密达 就是这个办法,我觉得可以解决lz问题了。
大约一年之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 这个过程并不需要操作系统的文件复制参与,完全符合你的要求。至于你说的在粘贴之前拦截剪贴板,完全没有这个需求嘛。另外,我说的这个,也不是我的发明创造,你可以看下windows远程桌面的跨机文件复制,就是这么实现的。
大约一年之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复jkkj1630: 我说的明确是,我要知道你的高级的需求是什么。你说你要做一个远程控制程序,传输文件,但是在我看来,我的代码完全可以实现你的需求了。当用户复制的时候,可以得到文件名,在你的目标计算机(肯定不是一个计算机),粘贴的时候,你使用你自己的ole类型,然后调用你的程序去完成实际的文件传输。
大约一年之前 回复
jkkj1630
jkkj1630 回复caozhy: 还不明确嘛,我只是希望知道如何捕捉到监听事件,在尽量不用Hook的情况下,Hook毕竟是一门偏门技术。
大约一年之前 回复
wodexinhao
wodexinhao 回复caozhy: 真搞笑,你去找csdn查查,看看哪些人下载了你的资源,你的自信哪里来的?人家是C++写的,跟你C#有毛关系,真是可笑,不就是想逼人家贴代码出来吗?呵呵
大约一年之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复showbo: 主要是lz的需求不明确,需要了解lz完整的要求才好找到解决方法。楼下那个基本上也就是抄了我的程序。
大约一年之前 回复
showbo
支付宝加好友偷能量挖 楼主可以采纳了,caozhy写的demo绝对是经过测试的,不懂也可以继续问他。。
大约一年之前 回复

完整代码:https://download.csdn.net/download/caozhy/10504161
目前在审核,明天上午可以下载。

2
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复jkkj1630: qq就不知道了,如果它用的是外壳,那么应该是也可以的。如果是自己的实现就不好说了
大约一年之前 回复
jkkj1630
jkkj1630 可能粘贴在QQ上呢。
大约一年之前 回复
jkkj1630
jkkj1630 需要在设置到粘贴板里,保证任何地方粘贴文件都行的那种。
大约一年之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 既然你一点就通,代码就不具体帮你弄了
大约一年之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 如果你只是通过资源管理器/我的电脑等基于shell的程序粘贴的话,可以用shell扩展实现。在shell扩展中,你可以通过QueryContextMenu注入你的粘贴命令,并且在InvokeCommand中处理它
大约一年之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复jkkj1630: 我知道了,你要拦截粘贴文件,是吧
大约一年之前 回复
jkkj1630
jkkj1630 你这个是复制时候的事件,这个我知道怎么截取。
大约一年之前 回复
jkkj1630
jkkj1630 而且我说的是C++,我要截取文件被粘贴的时候的事件。
大约一年之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复jkkj1630: 我看清你的问题了啊。本来复制就不是把文件内容复制到剪贴板,而只是复制文件路径。
大约一年之前 回复
jkkj1630
jkkj1630 你貌似没看懂问题,我说的是截取粘贴功能,你这个是截取复制功能。
大约一年之前 回复

图片说明

这是windows远程桌面的拷贝文件的方式,你可以看到,对于目标计算机来说,就是一个自定义的handler就搞定,并没有用到标准的文件复制

0

其实,楼主的思路是对的,通过hook方式也是完全可以实现你的功能的,你之所以有时候可以,有时候不可以,估计是hook的函数不对,或者代码哪里粗心大意了。既然你不想用hook,那么你的思路通过ole剪切板也是对的,你说的TeamViewer我没有用过,不知道他是怎么实现文件粘贴功能的,在这里给你用ole的方式来实现复制和粘贴,也可以直接拖拽实现文件传输,嗯,本来不想来回答问题了,想想还是算了,回答一下也不会怎么样,希望我的回复被删除之前你能看到,代码我就不贴在这里了,我看上传到哪里给你下载,或者直接发给你吧,至于你说的在QQ上粘贴,我不明白什么意思,是想要类似粘贴在QQ上的功能,还是截获粘贴在QQ上的事件
图片说明

-5
wodexinhao
wodexinhao 我已经私信你了,不想在这里回复,看看都是群什么人,哈哈
大约一年之前 回复
jkkj1630
jkkj1630 通过什么手段监听OLE粘贴事件呢??
大约一年之前 回复
wodexinhao
wodexinhao 监听ole剪切板就是这个效果,只要你本地复制了文件,就能获取到复制信息,获取到信息后你想让只需要向远程端发送你想要做的指令,等远程端执行完你的指令,你在输入框粘贴就可以实现文件传输,或者说你让远程端返回一个指令(例如我已经做好准备你开始传输吧,那就开始传输)后开始传输
大约一年之前 回复
wodexinhao
wodexinhao 上传到其它地方,贴的链接不是csdn的不知道会不会违规
大约一年之前 回复
wodexinhao
wodexinhao 要不你留个邮箱吧,我直接发给你快一点
大约一年之前 回复
wodexinhao
wodexinhao 你粘贴在QQ输入框上,然后点击发送就可以了,这里给你说的也就是监听ole剪贴版,复制了文件,可以获取到文件信息,你需要的时候传输文件就好了,跟复制在QQ输入框一样的效果,你的意思是这样吗
大约一年之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复jkkj1630: 本来就是不到粘贴不传输。你复制的时候只是将文件名拷贝到剪贴板,而不是文件,我之前就和你说了。
大约一年之前 回复
jkkj1630
jkkj1630 我就是想粘贴在QQ上的事件,不止QQ,就要做出一种本地复制,远程同步,但不到粘贴不传输,其他的跟在远程复制没有任何区别。
大约一年之前 回复
jkkj1630
jkkj1630 比如,你复制一个文件,粘贴在QQ输入框上,就会发送给对方,楼上说的那种情况通过shell接口,是不能实现的,他说的那种必须是在explorer.exe进程上粘贴的。
大约一年之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 lz问的和你说的是两回事,有代码不贴出来,还欺诈人家。
大约一年之前 回复

你只需要监听这个Ole剪贴板,只要本地复制了文件,你发送复制的文件列表信息到远程端,同时通知远程端创建这几个同名文件,至于你需要什么时候开始传输,那完全由你自己控制

-5
wodexinhao
wodexinhao 嗯,我怎么发给你,我看看上传到哪里,把链接贴出来给你下载,因为上传到csdn需要审核
大约一年之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 回复devmiao: 23333333,87v5
大约一年之前 回复
jkkj1630
jkkj1630 如何监听这个Ole剪贴板。
大约一年之前 回复
devmiao
见了你女王大人喵姐还不跪下 什么都不说了,给你点个踩吧。
大约一年之前 回复

楼主相信我,只要你监听ole剪切板就可以实现你需要的功能,你只是之前思路和处理顺序之类的搞错了,我相信你的能力,你自己好好研究一下,完全可以自己解决的,如果有问题,可以随时跟我交流,这里说明白一点,我不要你的C币,如果你需要源码我可以发给你,保证你完全解决你的问题为止,你这个C币收回去吧,没必要浪费。有一点觉得可笑的是人家用VC写的,对于某某发的链接看都懒得看一眼,居然会说抄袭他的,真实笑到肚子痛,哈哈
图片说明

-5
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复wodexinhao: 一会儿道歉一会儿又故伎重演。csdn排名前几的你都来这一套。你很牛。
大约一年之前 回复
wodexinhao
wodexinhao 都可以去看看怎么回事吧 https://ask.csdn.net/questions/692913
大约一年之前 回复
wodexinhao
wodexinhao 呵呵,真是大言不惭,清者自清,何必多说,何来攻击,确实说了一句人家投机取巧,就这个词语用的不好,别的一句都没说,链接发出来大家可以自己去看 https://ask.csdn.net/questions/692913
大约一年之前 回复
zqbnqsdsmd
再穷不能穷山东思密达 这个抄袭别人回答的人,可以说是很讨厌了。上次我亲眼看到他攻击菠菜老师的。
大约一年之前 回复
wodexinhao
wodexinhao 长见识了,csdn里面都些什么人,自己去查吧,清者自清,没必要再说什么,哈哈,看来有人的地方就有江湖,只要你触及了人家的利益,就会来攻击你,呵呵
大约一年之前 回复
wodexinhao
wodexinhao 真是搞笑啊,像他写的东西在我眼里就跟小学生作业似的,哦不,连垃圾都不如,看都懒得看一眼,再说了,他这都有源码了,还反汇编,你真搞笑,一说话就暴露你的无知,不要来秀下限了
大约一年之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 你在论坛里抄袭我的回答、bobo的回答、老曹的回答、狗狗的回答,不知道做了多少次了,希望你好自为之。
大约一年之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 1998年台湾有个叫精笔的公司,就玩弄小聪明,他们反汇编了汉王的程序,搞清楚了算法,然后自己重新写了一个程序,以为这样就不算抄袭了,结果还是赔偿了280玩,新闻地址在此:http://it.sohu.com/20050614/n240109153.shtml
大约一年之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 你的代码的思路完全是抄袭1L的,你蓄意这么做,就不要此地无银三百两了,收起你的小聪明吧。
大约一年之前 回复

如果留邮箱不违规的话,楼主赶紧留邮箱,如果违规那我只有先上传,然后发链接地址到这里来,为什么不直接发链接地址或者贴代码,你也看到了,人气太高,没办法,只要回复了,好多人会在这里顶我,哦,不对,是踩我,我感到好荣幸啊,得到大家的关注,谢谢大家,哈哈
图片说明

-6
jkkj1630
jkkj1630 jkkj1630@163.com
大约一年之前 回复
wodexinhao
wodexinhao 真配合
大约一年之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 给你点踩了,你的程序和1楼的没有区别啊。
大约一年之前 回复
wodexinhao
wodexinhao 各位帅哥美女,赶紧来踩我,不踩我不舒服,不踩我我感觉好孤单
大约一年之前 回复
wodexinhao
wodexinhao 监听ole剪切板
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!