【摘 要】隨著社會的發(fā)展,全球一體化加速,掌握一門外語顯得尤為重要,在學(xué)習(xí)外語過程中,電子詞典的使用為用戶提供了更高效的查詢方式,基于以上的原因開發(fā)了這款即指即譯翻譯器。本系統(tǒng)是基于電腦桌面程序的翻譯器,它主要功能是:屏幕取詞、單詞查詢和詞庫管理。論文先對本課題涉及的關(guān)鍵技術(shù)進(jìn)行逐個的解釋與介紹,然后對整個系統(tǒng)做了功能與運行環(huán)境的需求說明,接著進(jìn)行系統(tǒng)的設(shè)計部分,包括界面設(shè)計和數(shù)據(jù)庫設(shè)計,最后對系統(tǒng)的實現(xiàn)做了更具體的闡述。本系統(tǒng)實現(xiàn)了用戶從屏幕中隨機(jī)截取字符串,構(gòu)成單詞在數(shù)據(jù)詞庫中進(jìn)行查詢并通過界面顯示給用戶,同時系統(tǒng)還提供詞庫管理功能,可對詞庫進(jìn)行添加、修改、刪除單詞等操作。本文把理論與實踐交替結(jié)合起來從技術(shù)介紹到系統(tǒng)實現(xiàn)的每一部分都認(rèn)真完成,努力做到最好的論文描述與系統(tǒng)呈現(xiàn)。
【關(guān)鍵詞】即指即譯 屏幕取詞 搜索
一、引言
隨著信息化的到來,越來越多的人開始學(xué)習(xí)英語,為了方便用戶隨時學(xué)習(xí)英語,,提高學(xué)習(xí)效率,簡化操作方式,需要一個即指即譯的翻譯器,以實現(xiàn)英文的即時漢化。因此,設(shè)計一個英語翻譯器,方便用戶學(xué)習(xí)英語,提高了學(xué)習(xí)的效率,改善用戶學(xué)習(xí)體驗[1]。
二、課題關(guān)鍵技術(shù)
屏幕取詞,也叫做鼠標(biāo)取詞、鼠標(biāo)抓詞,顧名思義就是把屏幕上顯示出來的字符取到(在某些情況下也能取到屏幕上看不到的字符)。屏幕取詞廣泛的應(yīng)用在電子字典上,也可以用在其它方面[1]。
按照取詞范圍來分,一般可以分為點、線、面取詞三種。
點取詞,就是取屏幕上某一點處的字符。這個點可以用鼠標(biāo)來確定,也可以給定一個坐標(biāo)。
線取詞,就是取屏幕上某一行的所有字符。
面取詞,就是取一個區(qū)域范圍中的所有字符。
目前有兩種實現(xiàn)方式:
第一種:采用截獲對部分gdi的api調(diào)用來實現(xiàn),如textout,textouta等。
第二種:對每個設(shè)備上下文(dc)做一分copy,并跟蹤所有修改上下文(dc)的操作。
三、需求分析
即指即譯翻譯器,作為一個工具類軟件,其最主要的需求便是實現(xiàn)即指即譯的功能。
通過對用戶需求定位,可以得出本系統(tǒng)需要包含以下具體功能模塊:單詞查詢模塊、屏幕取詞模塊、詞庫管理模塊。
各模塊主要功能分析如下:
(一)單詞查詢模塊:
單詞查詢模塊是整個系統(tǒng)最重要的功能模塊之一,主要實現(xiàn)英漢單詞之間的互譯,用戶可以根據(jù)自己的需要查詢單詞的含義,從數(shù)據(jù)庫中得到單詞的基本信息[2]。
(二)屏幕取詞模塊:
屏幕取詞模塊是本系統(tǒng)同的精髓,一切的功能都是圍繞其展開的,主要實現(xiàn)從屏幕上獲取文字信息,匹配單詞,將結(jié)果傳遞給查詢模塊。屏幕取詞的性能要求主要為:穩(wěn)定、準(zhǔn)確、快速。
四、系統(tǒng)設(shè)計
(一)系統(tǒng)總體設(shè)計
整個系統(tǒng)為用戶提供最簡便的操作方式,以滿足用戶需求。具體操作流程為:用戶打開軟件,啟動屏幕取詞功能,用鼠標(biāo)選擇在屏幕上的字符,系統(tǒng)自動獲取相關(guān)字符,并在詞庫中進(jìn)行匹配查詢,然后將查詢結(jié)果展示給用戶。
(二)系統(tǒng)詳細(xì)設(shè)計
本系統(tǒng)分為三個子模塊,屏幕取詞模塊主要功能是將從屏幕上獲取的詞匯信息傳遞給單詞查詢模塊,單詞查詢模塊的主要功能是負(fù)責(zé)將詞匯進(jìn)行匹配查詢。
屏幕取詞模塊詳細(xì)設(shè)計
屏幕取詞模塊為用戶從計算機(jī)顯示屏幕上掃面并獲取字符串信息,并將字符串傳遞至查詢模塊,完成屏幕取詞的活動。
屏幕取詞具體流程為:
鼠標(biāo)指向所需要查詢單詞的位置,系統(tǒng)開始從鼠標(biāo)位置所在點,對字符串進(jìn)行掃描,直到遇上第一個空格位置。再對系統(tǒng)所掃描過的矩形區(qū)域內(nèi)的字符串長度進(jìn)行計算,然后對比坐標(biāo),判定鼠標(biāo)是否在此區(qū)域內(nèi),如果判定結(jié)果為Y,則存儲字符串,并將鼠標(biāo)信息發(fā)送給取詞函數(shù),取詞活動結(jié)束;如果判定結(jié)果為N,則找到下一個空格所在位置,并計算出該空格與前一個空格之間的矩形區(qū)域內(nèi)的字符串大小,然后再次對鼠標(biāo)是否處在此區(qū)域內(nèi)進(jìn)行第二次判定,如果判定結(jié)果為Y,存儲字符串,并將鼠標(biāo)信息發(fā)送給取詞函數(shù),取詞活動結(jié)束;判定結(jié)果為N,則返回GetCursorPos函數(shù),對字符串重新進(jìn)行掃面,直到成功進(jìn)行取詞活動為止。
(三)屏幕取詞技術(shù)解決方案的設(shè)計
實現(xiàn)屏幕取詞需要做兩件事情:第一件事情是截獲系統(tǒng)對ExtTextOutW 等API 函數(shù)的調(diào)用;第二件事情就是分析所截獲函數(shù)的入口參數(shù),得到所要取的詞[3]。
截獲系統(tǒng)對API 函數(shù)的調(diào)用有兩種方法,通過直接改寫API 在內(nèi)存中的映像,嵌入?yún)R編代碼,使之被調(diào)用時跳轉(zhuǎn)到指定的地址運行來截獲;或者改寫IAT(import address table輸入地址表),重定向API函數(shù)的調(diào)用來實現(xiàn)對API 的截獲。
這里主要采取第一種方法。
1.截獲系統(tǒng)API原理分析設(shè)計
通過設(shè)計一個動態(tài)鏈接庫,在DLL 的入出口函數(shù)(DLLMain)中對ExtTextOutW 等函數(shù)進(jìn)行攔截和恢復(fù)。dwReason 等于DLL_PROCESS_ATTACH(DLL 被映像到進(jìn)程的地址空間)時攔截API 調(diào)用;dwReason 等于DLL_PROCESS_DETACH(DLL從進(jìn)程的地址空間中解除映像)時恢復(fù)API 調(diào)用。DLL 中的導(dǎo)出函數(shù)有若干個,其中主要有設(shè)置掛鉤、返回當(dāng)前所取的字等函數(shù)。設(shè)置掛鉤函數(shù)調(diào)用SetWindowsHookEx 安裝一個系統(tǒng)鼠標(biāo)掛鉤。
2.API 的入口參數(shù)設(shè)計
ExtTextOutW的入口參數(shù)hdc,x,y ,IpString,cbString ,根據(jù)這些具體參數(shù)的含義進(jìn)行相關(guān)的分布和利用,提取信息,如果設(shè)備上下文(hdc)不在任何窗口,很可能在內(nèi)存兼容對象中。這時就不能準(zhǔn)確計算出鼠標(biāo)出的漢字,以為當(dāng)系統(tǒng)調(diào)ExtTextOutW等函數(shù)時還沒有確定輸出的位置。通過簡單的把內(nèi)存兼容對象區(qū)域的右上角作為視口原點,可以解決絕大部分問題。對于在網(wǎng)頁中取詞,需要根據(jù)IE的版本和操作系統(tǒng)的版本做特別的處理。這些特別處理也和內(nèi)存兼容位圖有關(guān)。
五、總結(jié)
本文所闡述的系統(tǒng)主要是針對廣大用戶在日常生活中翻譯詞匯的一個便捷功能的實現(xiàn)。從需求分析、開發(fā)工具和開發(fā)平臺的選擇、系統(tǒng)總體功能設(shè)計、系統(tǒng)詳細(xì)功能設(shè)計、數(shù)據(jù)庫設(shè)計、界面設(shè)計、代碼實現(xiàn),始終依據(jù)軟件工程的基本思想及管理信息系統(tǒng)的開發(fā)流程,實現(xiàn)了預(yù)期的開發(fā)目標(biāo),滿足了用戶需求,基本上實現(xiàn)了本次論文的設(shè)計目的。但是有一些可以需要改進(jìn)的地方,比如操作界面的友好度,如果加上在所選擇的地方顯示出來所查詞匯的釋義,用戶體驗將會更加完美。
參考文獻(xiàn):
[1]侯俊杰.深入淺出MFC(第二版)[M]. 華中科技大學(xué)出版社, 2001
[2]孫鑫.vc++深入詳解 [M]. 電子工業(yè)出版,2006
[3]王歆、張林山.Windows 環(huán)境下的屏幕取詞技術(shù)[J].計算機(jī)系統(tǒng)應(yīng)用,2000,(4):6
[4]顧平、刁紅軍.屏幕取詞原理與實現(xiàn)[J].計算機(jī)工程與應(yīng)用,2004,(28):10
[5]張磊(1982-),男,河南南陽人,南陽理工學(xué)院軟件學(xué)院教師