在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近公司有一个 项目需要实现类似于金山词霸,有道词典等的屏幕取词功能,准确来说是划词功能,网上搜了各种屏幕取词无外乎就两种: A、金山词霸组件法 B、Nhw32.dll法 百度搜到的重复内容真的太多了,自己也google,也没找到比较好的方法,然后只能根据需求硬着头皮自己实现,废话不多说了,先看我实现的原理: 前提条件:文字要能被选择,比如按钮上的文字不能被选择; 原理:定义全局的鼠标钩子,在选择文字结束之后向该窗体发送ctrl+c的命令,然后直接从剪切板中获取; 原理很简单,实现起来也不是很复杂,只是中间有很多坑的地方: 问题1:鼠标选词这个动作其实执行了三步: 1.左键按下(mousedown) 2.鼠标移动(mousemove) 3.左键抬起(mouseup) 钩子的实现网上有很多方法,各位看官可自行百度,也可在文后下载源码。 这三步能够知道鼠标选择了文字,在mouseup的时候去执行后续的操作,当然还有一些相同的鼠标操作并不是选择文字,例如拖动一个窗体,就算这个动作执行完了可能并没有在该窗体复制到文字,影响也并不是很大,如果以后想到更好的解决方法再来填坑,各位看官继续往下看。 问题2:ctrl+c的的命令发送其实有很多中方法,原理都很简单,应该都能看得懂啦 最简单的应该就是 SendKeys.SendWait("^c"); 还有一种 [DllImport("User32.dll")] 剪切板获取文字,这块建议大家用循环去取一下剪切板中的值,经验所得 IDataObject iData = Clipboard.GetDataObject(); if (null != iData) { if (iData.GetDataPresent(DataFormats.Text)) //检查是否存在文本 { for (int i = 0; i < 6; i++) { Thread.Sleep(500); string res = (String)iData.GetData(DataFormats.Text); if (!string.IsNullOrWhiteSpace(res)) { return res; } } } } 实现效果:
欢迎关注微信公众号获取源码
(关注公众号回复:屏幕取词,获取下载链接) 安卓:日本版douyin+美国版抖音(破解版不锁区)
关注微信公众号回复“douyin”获取下载链接,每个帖子都有福利哦
|
请发表评论