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