zoukankan      html  css  js  c++  java
  • [代码]--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”获取下载链接,每个帖子都有福利哦

  • 相关阅读:
    Java之集合类应用总结
    Java的HashMap和HashTable
    Java安全通信:HTTPS与SSL
    字符串如何排序
    HashMap泛型编程
    Java之currenHashMap
    Android游戏开发:游戏框架的搭建(1)
    Java安全通信概述
    嵌入式linux学习步骤
    图片水平无缝滚动的代码
  • 原文地址:https://www.cnblogs.com/girliswater/p/9442348.html
Copyright © 2011-2022 走看看