当前位置: 首页 > news >正文

[代码]--c#实现屏幕取词源码下载

最近公司有一个 项目需要实现类似于金山词霸,有道词典等的屏幕取词功能,准确来说是划词功能,网上搜了各种屏幕取词无外乎就两种:

A、金山词霸组件法

B、Nhw32.dll法

百度搜到的重复内容真的太多了,自己也google,也没找到比较好的方法,然后只能根据需求硬着头皮自己实现,废话不多说了,先看我实现的原理:

前提条件:文字要能被选择,比如按钮上的文字不能被选择;

原理:定义全局的鼠标钩子,在选择文字结束之后向该窗体发送ctrl+c的命令,然后直接从剪切板中获取;

原理很简单,实现起来也不是很复杂,只是中间有很多坑的地方:
1:如何知道鼠标选择了文字
2:选择完文字向窗体发送ctrl+c的命令

问题1:鼠标选词这个动作其实执行了三步:

1.左键按下(mousedown)

2.鼠标移动(mousemove)

3.左键抬起(mouseup)

钩子的实现网上有很多方法,各位看官可自行百度,也可在文后下载源码。

这三步能够知道鼠标选择了文字,在mouseup的时候去执行后续的操作,当然还有一些相同的鼠标操作并不是选择文字,例如拖动一个窗体,就算这个动作执行完了可能并没有在该窗体复制到文字,影响也并不是很大,如果以后想到更好的解决方法再来填坑,各位看官继续往下看。

问题2:ctrl+c的的命令发送其实有很多中方法,原理都很简单,应该都能看得懂啦

最简单的应该就是     

SendKeys.SendWait("^c");
SendKeys.Flush();

还有一种

[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static public extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
private void SendCtrlC(IntPtr hWnd)
{
    uint KEYEVENTF_KEYUP = 2;
    byte VK_CONTROL = 0x11;
    SetForegroundWindow(hWnd);
    keybd_event(VK_CONTROL, 0, 0, 0);
    keybd_event(0x43, 0, 0, 0); //Send the C key (43 is "C")
    keybd_event(0x43, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);// 'Left Control Up
}

 剪切板获取文字,这块建议大家用循环去取一下剪切板中的值,经验所得

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”获取下载链接,每个帖子都有福利哦

 

转载于:https://www.cnblogs.com/girliswater/p/9442348.html

相关文章:

  • java获取局域网mac_最靠谱的JAVA局域网内通过IP地址获取MAC地址(本人亲测)
  • java 验证客户端证书_用于身份验证的Apache客户端证书
  • 【BZOJ1046】上升序列(动态规划,贪心)
  • java离线api_Oracle官网下载Java的api离线文档
  • Bzoj5296: [Cqoi2018]破解D-H协议
  • java归并_java归并排序
  • java string的实现_string类的实现
  • ant design 中,使用dva/fetch 设置导致无法从后台导出excel的问题
  • python引用计数实例_Python中的引用计数法
  • LoadRunner Vuser接口测试脚本 Post举例
  • java 类的继承_Java:类与继承
  • 浅谈对象的复制拷贝
  • java官方网站下载_java下载 7.0 官方版
  • asp.net的% %特定用法
  • java代码shiro注解_java相关:Shiro集成Spring之注解示例详解
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • css系列之关于字体的事
  • JAVA多线程机制解析-volatilesynchronized
  • java小心机(3)| 浅析finalize()
  • Linux Process Manage
  • 对超线程几个不同角度的解释
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于Android乐音识别(2)
  • 前端知识点整理(待续)
  • 如何进阶一名有竞争力的程序员?
  • 如何利用MongoDB打造TOP榜小程序
  • 删除表内多余的重复数据
  • 实战|智能家居行业移动应用性能分析
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • elasticsearch-head插件安装
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​Spring Boot 分片上传文件
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (2)STL算法之元素计数
  • (pojstep1.3.1)1017(构造法模拟)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (办公)springboot配置aop处理请求.
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (数据结构)顺序表的定义
  • (一)Java算法:二分查找
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net Memory Profiler的使用举例
  • .net 无限分类
  • [ 数据结构 - C++]红黑树RBTree
  • [17]JAVAEE-HTTP协议
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [CTO札记]盛大文学公司名称对联