1樓:極其普通
一.基礎知識
首先想編這種程式需要一些基礎知識。
會用vc++,包括16/32位。
精通windows api特別是gdi,kernel部分。
懂組合語言,會用softice除錯程式,因為這種程式最好用softice除錯。
二.基本原理
在window 3.x時代,windows系統提供的字元輸出函式只有很少的幾個。
textout
exttextout
drawtext
......
其中drawtext最終是用exttextout實現的。
所以windows的所有字元輸出都是由呼叫textout和exttextout實現的。因此,如果你可以修改這兩個函式的入口,讓程式先呼叫你自己的一個函式再呼叫系統的字元輸出,你就可以得到windows所有輸出的字元了。
到了windows95時代,原理基本沒變,但是95比3.x要複雜。開始的時候,一些在windows3.
x下編寫的取詞軟體仍然可以是使用。但是後來出了個ie4,結果很多詞典軟體就因為不支援ie4而被淘汰了,但同時也給一些軟體創造了機會,如金山詞霸。其實ie4的問題並不複雜,只不過它的輸出的是unicode字元,是用textoutw和exttextoutw輸出的。
知道了這一點,只要也擷取就可以了。不過實現方法複雜一點,以後會有詳細講解。現在又出了個ie5,結果詞霸也不好用了,微軟真是#^@#$%$*&^@#@..........
我研究後找到了一種解決辦法,但還有些問題,有時會取錯,正在繼續研究,希望大家共同**。
另外還有windowsnt,原理也是一樣,只是實現方法和95下完全不同。
三.技術要點
要實現取詞,主要要解決以下技術問題。
1.擷取api入口,獲得api的引數。
2.安全地潛入windows內部,良好地相容windows的各個版本
3.計算滑鼠所在的單詞和字母。
4.如果你在window95下,做32位程式,還涉及windows32/16混合程式設計的技術。
今天先到這裡吧!最好準備一份softice for 95/98和金山詞霸,讓我們先來分析一下別人是怎麼做的。
歡迎與我聯絡
e-mail:yeedong@163.***
主題 螢幕取詞技術系列講座(二)
作者 亦東
很抱歉讓大家久等了!
我看了一些人的回帖,發現很多人對取詞的原理還是不太清楚。
首先我來解釋一下hook問題。詞霸中的確用到了hook,而且他用了兩種hook其中一種是windows標準hook,通過setwindowhook安裝一個**函式,它安裝了一個滑鼠hook,是為了可以及時響應滑鼠的訊息用的和取詞沒太大關係。
另一種鉤子是api鉤子,這才是取詞的核心技術所在。他在textout等函式的開頭寫了一個jmp語句,跳轉到自己的**裡。
你用softice看不到這個跳轉語句是因為它只在取詞的一瞬間才存在,平時是沒有的。
你可以在textout開頭設一個讀寫斷點
bpm textout
再取詞,就會找到詞霸用來寫鉤子的**了。
/**********************************
所以我在次強調,想學這種技術一定要懂組合語言和熟練使用softice.
**********************************/
至於從cjktl95中dump出來的未公開函式是和windows32/16混合程式設計有關的,以後我會提到他們。
我先來講述取詞的過程,
0 判斷滑鼠是否在一個地方停留了一段時間
1 取得滑鼠當前位置
2 以滑鼠位置為中心生成一個矩形
3 掛上api鉤子
4 讓這個矩形產生重畫訊息
5 在鉤子裡等輸出字元
6 計算滑鼠在哪個單詞上面,把這個單詞儲存下來
7 如果得到單詞則摘掉api鉤子,在一段時間後,無論是否得到單詞都摘掉api鉤子
8 用單詞查詞庫,顯示解釋框。
很多步驟實現起來都有一些難度,所以在中國可以做一個完善的取詞詞典的人屈指可數。
其中0,1,2,7,8比較簡單就不提了。
先說如何掛鉤子:
所謂鉤子其實就是在windowsapi入口寫一個jmp ***x:***x語句,跳轉到自己的**裡。
步驟如下:
1.取得windows api入口,用getprocaddress實現
2.儲存api入口的前五個位元組,因為jmp是0xea,地址是4個位元組
3.寫入跳轉語句
這步最複雜
windows的**段本來是不可以寫的,但是microsoft給自己留了個後門。
有一個未公開函式是alloccstodsalias,
uint winapi alloccstodsalias(uint);
你可以取到這個函式的入口,把api的**段的選擇符(要是不知道什麼是選擇符,就先去學學保護模式程式設計吧)傳給他,他會返回一個可寫的資料段選擇符。這個選擇符用完要釋放的。用新選擇符和api入口的偏移量合成一個指標就可以寫windows的**段了。
這就是取詞技術的最核心的東東,不止取詞,連外掛中文平臺全屏漢化都是使用的這種技術。現在知道為什麼這麼簡單的幾句話卻很少知道了吧?因為太多的產品使用他,太多的公司靠他賺錢了。
這些公司和產品有:中文之星,四通利方,南極星,金山詞霸,實達銘泰的東方快車,roboword,譯典通,即時漢化專家等等等等。。。。還有至少20多家小公司。
他們的具體實現雖然不同,但大致原理是相同的。
我這些都是隨手寫的,也沒有提綱之類的東西,以後如果有機會我會整理一下,大家先湊合著看吧!xixi...
?主題 關於螢幕取詞的討論(三)
作者 亦東
讓大家久等,很抱歉,前些時候工作忙硬碟又壞了,太不幸了。
這回來點真格的。
咱們以擷取textout為例。
下面是**:
//擷取textout
typedef uint (winapi* alloccstodsalias)(uint);
alloccstodsalias alloccstodsalias;
byte newvalue[5];//儲存新的入口**
byte oldvalue[5];//api原來的入口**
unsigned char * address=null;//可寫的api入口地址
uint dsselector=null;//指向api入口的可寫的選擇符
word offsetentry=null;//api的偏移量
bool bhookalready = false; //是否掛鉤子的標誌
bool inithook()
bool clearhook()
bool hookon()
bhookalready=true;
} }bool hookoff()
bhookalready=false;
} }//鉤子函式,一定要和api有相同的引數和宣告
bool winapi mytextout(hdc hdc,int nxstart,int nystart,lpcstr lpszstring,uint cbstring)
上面的**是一個最簡單的掛api鉤子的例子,我要提醒大家的是,這段**是我憑記憶寫的,我以前的**丟了,我沒有編譯測試過
因為我沒有vc++1.52.所以**可能會有錯。
建議使用borland c++,按16位編譯。
如果用vc++1.52,則要改個選項
在vc++1.52的option裡,有個記憶體模式的設定,選大模式,和"ds!=ss ds load on function entry.",切記,否則會系統崩潰。
2樓:匿名使用者
1.判別所指向的控制元件型別
2.查表得這類控制元件所需要的字串在什麼屬性內3.提取所需要的字串
4.檢索後臺資料庫得所需要的結果
我記得是這樣的
3樓:進新
唉.說簡單點就是截獲api的textout等顯示文字的函式,然後傳送訊息給截獲程式.
hookapi的**網上有都是.
金山詞霸的螢幕取詞是什麼原理
4樓:匿名使用者
一.基礎知識 首先想編這種程式需要一些基礎知識。 會用vc++,包括16/32位。
精通windows api特別是gdi,kernel部分。 懂組合語言,會用softice除錯程式,因為這種程式最好用softice除錯。 二.
基本原理 在window 3.x時代,windows系統提供的字元輸出函式只有很少的幾個。 textout exttextout drawtext ......
其中drawtext最終是用exttextout實現的。 所以windows的所有字元輸出都是由呼叫textout和exttextout實現的。因此,如果你可以修改這兩個函式的入口,讓程式先呼叫你自己的一個函式再呼叫系統的字元輸出,你就可以得到windows所有輸出的字元了。
到了windows95時代,原理基本沒變,但是95比3.x要複雜。開始的時候,一些在windows3.
x下編寫的取詞軟體仍然可以是使用。但是後來出了個ie4,結果很多詞典軟體就因為不支援ie4而被淘汰了,但同時也給一些軟體創造了機會,如金山詞霸。其實ie4的問題並不複雜,只不過它的輸出的是unicode字元,是用textoutw和exttextoutw輸出的。
知道了這一點,只要也擷取就可以了。不過實現方法複雜一點,以後會有詳細講解。現在又出了個ie5,結果詞霸也不好用了,微軟真是#^@#$%$*&^@#@..........
我研究後找到了一種解決辦法,但還有些問題,有時會取錯,正在繼續研究,希望大家共同**。 另外還有windowsnt,原理也是一樣,只是實現方法和95下完全不同。 三.
技術要點 要實現取詞,主要要解決以下技術問題。 1.擷取api入口,獲得api的引數。
2.安全地潛入windows內部,良好地相容windows的各個版本 3.計算滑鼠所在的單詞和字母。
4.如果你在window95下,做32位程式,還涉及windows32/16混合程式設計的技術。 今天先到這裡吧!
最好準備一份softice for 95/98和金山詞霸,讓我們先來分析一下別人是怎麼做的。 歡迎與我聯絡 e-mail:yeedong@163.
*** 主題 螢幕取詞技術系列講座(二) 作者 亦東 很抱歉讓大家久等了! 我看了一些人的回帖,發現很多人對取詞的原理還是不太清楚。 首先我來解釋一下hook問題。
詞霸中的確用到了hook,而且他用了兩種hook其中一種是windows標準hook,通過setwindowhook安裝一個**函式,它安裝了一個滑鼠hook,是為了可以及時響應滑鼠的訊息用的和取詞沒太大關係。 另一種鉤子是api鉤子,這才是取詞的核心技術所在。他在textout等函式的開頭寫了一個jmp語句,跳轉到自己的**裡。
你用softice看不到這個跳轉語句是因為它只在取詞的一瞬間才存在,平時是沒有的。 你可以在textout開頭設一個讀寫斷點 bpm textout 再取詞,就會找到詞霸用來寫鉤子的**了。 /********************************** 所以我在次強調,想學這種技術一定要懂組合語言和熟練使用softice.
**********************************/ 至於從cjktl95中dump出來的未公開函式是和windows32/16混合程式設計有關的,以後我會提到他們。 我先來講述取詞的過程, 0 判斷滑鼠是否在一個地方停留了一段時間 1 取得滑鼠當前位置 2 以滑鼠位置為中心生成一個矩形 3 掛上api鉤子 4 讓這個矩形產生重畫訊息 5 在鉤子裡等輸出字元 6 計算滑鼠在哪個單詞上面,把這個單詞儲存下來 7 如果得到單詞則摘掉api鉤子,在一段時間後,無論是否得到單詞都摘掉api鉤子 8 用單詞查詞庫,顯示解釋框。 很多步驟實現起來都有一些難度,所以在中國可以做一個完善的取詞詞典的人屈指可數。
其中0,1,2,7,8比較簡單就不提了。 先說如何掛鉤子: 所謂鉤子其實就是在windowsapi入口寫一個jmp ***x:
***x語句,跳轉到自己的**裡。 步驟如下: 1.
取得windows api入口,用get
我的金山詞霸為何滑鼠取詞不能使用
不要把 金山詞霸 檔案放在中文名字的檔案裡,放在英文名字的資料夾裡就好了。可能是你禁止了螢幕取詞,執行金山詞霸,右鍵在任務的圖示,在彈出的對話方塊中選中螢幕取詞就可以了。還是就是你設定了組合健來取詞。在詞霸的設定裡看得到取詞模式,改為滑鼠取詞就可 我的電腦是win7的新安裝的金山詞霸,取詞功能開啟了...
這個的原理是什麼,這個的原理是什麼?
木桶原理 cannikin law 木桶原理又稱短板理論,木桶短板管理理論。所謂 木桶理論 也即 木桶定律 其核心內容為 一隻木桶盛水的多少,並不取決於桶壁上最高的那塊木塊,而恰恰取決於桶壁上最短的那塊。根據這一核心內容,木桶理論 還有兩個推論 其一,只有桶壁上的所有木板都足夠高,那木桶才能盛滿水。...
守護的近義詞霸氣一點的,守護的近義詞是什麼
朋友您好!守護近義詞 保護,防守,保衛,守衛 拼音 sh u h 釋義 1.watch 看守保護由武裝衛兵守護著兩座高大的圍牆2.劍平守護著他,一邊替他料理社裡積壓的檔案。高雲覽 小城春秋 保護,防守,保衛,守衛 保護 霸佔 守護 守護的近義詞是什麼 近義詞 保衛 保護 守衛 防守 看守 引證解釋 ...