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)
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.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 - Các hàm chủ yếu được trình bày qua những lưu đồ sau:
SVTH : Lương Cao Hồi Tâm Lớp TH40 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 ĐỒ HÀ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
Gọïi InstallOverrideAPI()Bắt đầu 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
Báo lỗiBáo lỗi Báo lỗi No Yes No Yes
LƯU ĐỒ HÀM INSTALL OVERRIDE( GTDLL.DLL : InstallOverrideAPI ) ( GTDLL.DLL : InstallOverrideAPI )
LƯU ĐỒ HÀ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() )