程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 鼠標屏幕取詞技術的原理和實現

鼠標屏幕取詞技術的原理和實現

編輯:vc教程

“鼠標屏幕取詞”技術是在電子字典中得到廣泛地應用的,如四通利方和金山詞霸等軟件,這個技術看似簡單,其實在windows系統中實現卻是非常復雜的,總的來說有兩種實現方式:

第一種:采用截獲對部分gdi的api調用來實現,如textout,textouta等。

第二種:對每個設備上下文(dc)做一分copy,並跟蹤所有修改上下文(dc)的操作。   

第二種方法更強大,但兼容性不好,而第一種方法使用的截獲windowsapi的調用,這項技術的強大可能遠遠超出了您的想象,毫不誇張的說,利用windowsapi攔截技術,你可以改造整個操作,事實上很多外掛式windows中文平台就是這麼實現的!而這項技術也正是這篇文章的主題。

截windowsapi的調用,具體的說來也可以分為兩種方法:

第一種方法通過直接改寫winapi 在內存中的映像,嵌入匯編代碼,使之被調用時跳轉到指定的地址運行來截獲;第二種方法則改寫iat(import address table輸入地址表),重定向winapi函數的調用來實現對winapi的截獲。

第一種方法的實現較為繁瑣,而且在win95、98下面更有難度,這是因為雖然微軟說win16的api只是為了兼容性才保留下來,程序員應該盡可能地調用32位的api,實際上根本就不是這樣!win 9x內部的大部分32位api經過變換調用了同名的16位api,也就是說我們需要在攔截的函數中嵌入16位匯編代碼!

我們將要介紹的是第二種攔截方法,這種方法在win95、98和nt下面運行都比較穩定,兼容性較好。由於需要用到關於windows虛擬內存的管理、打破進程邊界牆、向應用程序的進程空間中注入代碼、pe(portable executable)文件格式和iat(輸入地址表)等較底層的知識,所以我們先對涉及到的這些知識大概地做一個介紹,最後會給出攔截部分的關鍵代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved