thông điệp của chương trình: MenuWndProc
Cài đặt giao diện chương trình từ RESOURCE và đăng ký lớp cửa sổ ứng dụng mới cho chương trình (hàm MenuInit): lớp cửa sổ ứng dụng mới cho chương trình (hàm MenuInit):
- Cửa sổ ứng dụng - Menu - Menu
Thoát?(WM_QUIT) (WM_QUIT)
KẾT THÚC
LƯU ĐỒ CỦA CHƯƠNG TRÌNH CHÍNH
Tạo cửa sổ chương trình
Xử lý thông điệp(hàm MenuWndProc) (hàm MenuWndProc) Yes
No
Lưu handle cửa sổ chương trình vào DLL (hàm InitHookDll),để các hàm trong DLL có thể cập nhật cửa sổ chương trình để các hàm trong DLL có thể cập nhật cửa sổ chương trình
Bỏ đăng ký lớp cửa sổ ứng dụngBẮT ĐẦU BẮT ĐẦU
+ GTDLL.ExtTextOutEx : Hàm override c a ExtTextOutủ
+ GTDLL.GetWordUnderPoint : Hàm phân tích và trích t ra kh i dịngừ ỏ v n b nă ả
- Các bi n tồn c c ch y u bao g m:ế ụ ủ ế ồ
+ GTDLL.hwndMain : Handle c a s chính c a application, dùng đ inử ổ ủ ể k t qu vào c a s chính.ế ả ử ổ
+ GTDLL.hMod : Handle tồn c c c a instance DLLụ ủ + GTDLL.mousePos : V trí chu t c n l y text.ị ộ ầ ấ + GTDLL.searched : Chi u dài text tìm th yề ấ
+ GTDLL.mWordUnderPoint : K t qu -t l y đ cế ả ừ ấ ượ + GTDLL.MouseHookHandle : Hook handles
BẮT ĐẦU
Trích từ ra bằng các thông tin trong parameter của
TextOut(); ExtTextOut() (gọi hàm GetWordUnderPoint): - hDC
- Vị trí cursor
- Toạ độ chuỗi in ra - Chuỗi text được in
- Độ dài chuỗi text được in - TEXTMETRIC hiện hành
Đã lấy được từ nào chưa?(biến searched) (biến searched)
Gọi RemoveOverrideAPI()
KẾT THÚC
LƯU ĐỒ HAØM OVERRIDE TextOut & ExtTextOut(GTDLL.DLL : TextOutEx & ExtTextOutEx) (GTDLL.DLL : TextOutEx & ExtTextOutEx)
No
Yes
Gọïi hàm TextOut(); ExtTextOut() chuẩnđể in ra dòng text như bình thường để in ra dòng text như bình thường
Bắt đầu
Nạp module thư viện GDI.EXEHàm LoadLibrary() Hàm LoadLibrary()
handle<HINSTANCE_ERROR
-Lấy điểm nhập hàm API TextOut,ExtTextOutHàm GetProcAddress() Hàm GetProcAddress()
-Lấy segment selector và địa chỉ offset của hàmAPI. Macro SELECTOROF và OFFSETOF API. Macro SELECTOROF và OFFSETOF -Giải phóng thư viện GDI.EXE đã nạp
Tên hàm=("TextOut" | "ExtTextOut)
-Lấy địa chỉ logic của hàm override TextOutEx(),ExtTextOutEx. Hàm MakeProcInstance() ExtTextOutEx. Hàm MakeProcInstance()
-Giải phóng hàm override khỏi segment giới hạn nóHàm FreeProcInstance() Hàm FreeProcInstance()
-Lấy bộ chọn phân đọan và địa chỉ offset hàm override-Đổi từ code selector của hàm API sang data selector -Đổi từ code selector của hàm API sang data selector Hàm PrestoChangoSelector()
-Ghi lên 5 byte đầu của hàm API bằng đoạn code assembler-Đổi trở lại từ data selector sang code selector -Đổi trở lại từ data selector sang code selector
Kết thúc Báo lỗi Báo lỗi Báo lỗi No Yes No Yes
LƯU ĐỒ HAØM INSTALL OVERRIDE( GTDLL.DLL : InstallOverrideAPI ) ( GTDLL.DLL : InstallOverrideAPI )
LƯU ĐỒ HAØM GỠ BỎ OVERRIDE(GTDLL.DLL : RemoveOverrideAPI) (GTDLL.DLL : RemoveOverrideAPI)
Bắt đầu
Nạp module thư viện GDI.EXE(Hàm LoadLibrary) (Hàm LoadLibrary)
handle < HINSTANCE_ERROR
- Lấy điểm nhập hàm API TextOut(),ExtTextOut() (Hàm GetProcInstance() ) (Hàm GetProcInstance() )