C#屏幕取詞法(金山詞霸組件)
說起屏幕取詞,金山詞霸算是經(jīng)驗豐富了。Windows下實現(xiàn)屏幕取詞其實比較復雜,下面介紹兩個C#屏幕取詞的實現(xiàn)方法。
金山詞霸組件實現(xiàn)C#屏幕取詞
在金山詞霸中2005中帶了一個XdictGrb.dll,添加引用
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Text;
- using System.Windows.Forms;
- using XDICTGRB;//金山詞霸組件
- namespace WindowsApplication1
- {
- public partial class Form1 : Form,IXDictGrabSink
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- GrabProxy gp = new GrabProxy();
- gp.GrabInterval = 1;//指抓取時間間隔
- gp.GrabMode = XDictGrabModeEnum.XDictGrabMouse;//設定取詞的屬性
- gp.GrabEnabled = true;//是否取詞的屬性
- gp.AdviseGrab(this);
- }
- //接口的實現(xiàn)
- int IXDictGrabSink.QueryWord(string WordString, int lCursorX, int lCursorY, string SentenceString, ref int lLoc, ref int lStart)
- {
- MessageBox.Shos( SentenceString);//鼠標所在語句
- return 1;
- }
- }
- }
實現(xiàn)屏幕取詞的其他方法:Nhw32.dll法
這個是C++寫的一個組件
nhw32.dll 主要引出兩個函數(shù):
1. DWORD WINAPI BL_SetFlag32(UINT nFlag,
HWND hNotifyWnd,
int MouseX,
int MouseY)
功能:
啟動或停止取詞。
參數(shù):
nFlag
[輸入] 指定下列值之一:
GETWORD_ENABLE: 開始取詞。在重畫被取單詞區(qū)域前設置此標志。nhw32.dll是通過
重畫單詞區(qū)域,截取TextOutA, TextOutW, ExtTextOutA,
ExtTextOutW等Windows API函數(shù)的參數(shù)來取詞的。
GETWORD_DISABLE: 停止取詞。
hNotifyWnd
[輸入] 通知窗口句柄。當取到此時,向該通知窗口發(fā)送一登記消息:GWMSG_GETWORDOK。
MouseX
[輸入] 指定取詞點的X坐標。
MouseY
[輸入] 指定取詞點的Y坐標。
返回值:
可忽略。
2. DWORD WINAPI BL_GetText32(LPSTR lpszCurWord,
int nBufferSize,
LPRECT lpWordRect)
功能:
從內(nèi)部緩沖區(qū)取出單詞文本串。對英語文本,該函數(shù)最長取出一行內(nèi)以空格為界的三個英文單詞串,遇空格,非英文字母及除‘-’外的標點符號,則終止取詞。對漢字文本,該函數(shù)最長取出一行漢字串,遇英語字母,標點符號等非漢語字符,則終止取詞。該函數(shù)不能同時取出英語和漢語字符。
參數(shù):
lpszCurWord
[輸入] 目的緩沖區(qū)指針。
nBufferSize
[輸入] 目的緩沖區(qū)大小。
lpWordRect
[輸出] 指向 RECT 結構的指針。該結構定義了被取單詞所在矩形區(qū)域。
返回值:
當前光標在全部詞中的位置。
此外,WinNT/2000版 nhw32.dll 還引出另兩個函數(shù):
1. BOOL WINAPI SetNHW32()
功能:
Win NT/2000 環(huán)境下的初始化函數(shù)。一般在程序開始時,調用一次。
參數(shù):
無。
返回值:
如果成功 TRUE ,失敗 FALSE 。
2. BOOL WINAPI ResetNHW32()
功能:
Win NT/2000 環(huán)境下的去初始化函數(shù)。一般在程序結束時調用。
參數(shù):
無。
返回值:
如果成功 TRUE ,失敗 FALSE 。
【編輯推薦】