[代碼]--c#實現屏幕取詞源碼下載

最近公司有一個 項目須要實現相似於金山詞霸,有道詞典等的屏幕取詞功能,準確來講是劃詞功能,網上搜了各類屏幕取詞無外乎就兩種:微信

A、金山詞霸組件法ui

B、Nhw32.dll法google

百度搜到的重複內容真的太多了,本身也google,也沒找到比較好的方法,而後只能根據需求硬着頭皮本身實現,廢話很少說了,先看我實現的原理:spa

前提條件:文字要能被選擇,好比按鈕上的文字不能被選擇;3d

原理:定義全局的鼠標鉤子,在選擇文字結束以後向該窗體發送ctrl+c的命令,而後直接從剪切板中獲取;orm

原理很簡單,實現起來也不是很複雜,只是中間有不少坑的地方:
1:如何知道鼠標選擇了文字
2:選擇完文字向窗體發送ctrl+c的命令blog

問題1:鼠標選詞這個動做其實執行了三步:ip

1.左鍵按下(mousedown)get

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」獲取下載連接,每一個帖子都有福利哦

相關文章
相關標籤/搜索