Tài liệu tham khảo công nghệ thông tin Nghiên cứu các phương pháp nhận dạng từ dưới Cursor mouse trên destop windows
Trang 1BÁO CÁO LUẬN VĂN TỐT NGHIỆP
Tên Đề Tài :
Nghiên Cứu Các Phương Pháp Nhận Dạng Từ Dưới Cursor Mouse Trên Desktop Windows Viết Chương Trình Nhận Dạng Từ Này.
Giáo viên hướng dẫn :
Lê Tấn Hùng
Sinh Viên Thực Hiện :
Lương Cao Hoài Tâm
Trang 2NỘI DUNG BÁO CÁO GỒM
CHƯƠNG I : TÌM HIỂU VỀ LẬP TRÌNH
WINDOWS CHƯƠNG II : TÌM HIỂU VỀ HOOKS
CHƯƠNG III : KỸ THUẬT OVERRIDE HÀM
API
CHƯƠNG IV : KẾT XUẤT VĂN BẢN TRONG
WINDOWS CHƯƠNG V : PHÂN TÍCH VÀ THIẾT KẾ
CHƯƠNG TRÌNH
Trang 3CHƯƠNG I : TÌM HIỂU VỀ
hệt cách gọi hàm của ngôn ngữ cấp cao, mỗi hàm có một tên gọi hẳn hoi, và tên gọi thường được đặt rất phù hợp với công dụng của hàm (mặc dù có hơi dài dòng) từ đó
tạo khả năng gợi nhớ cao
Trang 4CHƯƠNG I : TÌM HIỂU VỀ
LẬP TRÌNH WINDOWS
Với Windows, người lập trình không còn
phải lập trình theo kiểu assembly nữa mà lập
trình theo kiểu ngôn ngữ cấp cao, mọi hoạt động trong máy ở mức thấp từ hàm API trở xuống
thuộc phạm vi của Windows, và Windows không khuyến khích việc các ứng dụng can thiệp vào
lĩnh vực này Bù lại, bằng các hàm API, nó hỗ trợ rất hiệu quả cho người lập trình, giúp khai thác khả năng của thiết bị triệt để, dễ dàng và tiện lợi hơn bao giờ hết
Trang 5CHƯƠNG I : TÌM HIỂU VỀ
LẬP TRÌNH WINDOWS
Thư viện liên kết động DLL
Có 3 loại DLL khác nhau:
- Thư viện liên kết động API: thuộc hệ
Thống Windows, khi cài hệ điều hành thì nó đã có sẵn Chúng được nạp khi Windows khởi động.
- Thư viện liên kết động third party: do các công ty khác tạo ra trên môi trường Windows, hỗ trợ thêm công tác lập trình trong Windows.
- Thư viện liên kết động do chúng ta tạo ra
Trang 6CHƯƠNG I : TÌM HIỂU VỀ
LẬP TRÌNH WINDOWS
THÔNG ĐIỆP VÀ XỬ LÝ THÔNG ĐIỆP:
Lập trình trên môi trường Windows khác với lập trình ở các môi trường khác ở điểm là lập trình trên Windows luôn luôn gắn liền với những thông điệp Mọi hoạt động xảy ra trên một chương trình Windows đều thông qua các thông điệp Thông điệp sẽ được hệ thống báo cho các ứng dụng biết các tác động từ bên ngoài vào hệ thống Windows Một cửa sổ có thể gởi đi một thông điệp cho một cửa sổ khác và các cửa sổ đáp ứng lại thông điệp bằng cách gởi đi một thông điệp khác cho một cửa sổ khác.
Trang 7CHƯƠNG I : TÌM HIỂU VỀ
LẬP TRÌNH WINDOWS
Trong Windows có 3 loại thông điệp cơ bản:
- Những thông điệp tổng quát: có mã nhận diện mang tiền tố WM_ được coi là phần lớn trong ứng dụng và Windows đã cung cấp các hàm để giải quyết
- Những control notification: đây là những thông điệp WM_COMMAND được chuyển từ cửa sổ con tới cửa sổ bố mẹ
- Những nút lệnh: là thông điệp WM_COMMAND phát đi từ trình đơn, từ các nút điều khiển Đây là loại thông điệp yêu cầu ứng dụng phải thực hiện một công việc gì đó
Trang 8CHƯƠNG I : TÌM HIỂU VỀ
LẬP TRÌNH WINDOWS
Trong Windows có 3 loại thông điệp cơ bản:
- Những thông điệp tổng quát: có mã nhận diện mang tiền tố WM_ được coi là phần lớn trong ứng dụng và Windows đã cung cấp các hàm để giải quyết.
- Những control notification: đây là những thông điệp WM_COMMAND được chuyển từ cửa sổ con tới cửa sổ bố mẹ.
- Những nút lệnh: là thông điệp WM_COMMAND phát đi từ trình đơn, từ các nút điều khiển Đây là loại thông điệp yêu cầu ứng dụng phải thực hiện một công việc gì đó.
Trang 9CHƯƠNG I : TÌM HIỂU VỀ
LẬP TRÌNH WINDOWS
Windows cho phép ứng dụng gởi đi những thông điệp cho mình, cho các ứng dụng khác hoặc cho hệ thống.
Có 3 hàm Windows API để gởi thông điệp đi:
a) Hàm SendMessage b) Hàm PostMessage c) Hàm SendDlgItemMessage
Trang 10CHƯƠNG I : TÌM HIỂU VỀ
LẬP TRÌNH WINDOWS
I GIAO DIỆN THIẾT BỊ ĐỒ HỌA GDI
(GRAPHIC DEVICE INTERFACE)
Giao diện thiết bị đồ họa GDI (Graphic Device Interface) là một phần của API có nhiệm vụ duy trì sự độc lập của Windows đối với các thiết bị đồ họa (cho phép Windows làm việc với nhiều thiết bị đồ họa khác nhau) Windows GDI là một thư viện bao gồm một số hàm giúp kết xuất đồ họa (graphic output) lên màn hình, máy in…GDI sẽ tạo ra: điểm, đường kẻ, hình dạng (shape: chữ nhật, tròn…), chữ văn bản.
Trang 11CHƯƠNG I : TÌM HIỂU VỀ
LẬP TRÌNH WINDOWS
Windows sử dụng các hệ thống tọa độ khác nhau tùy theo hoàn cảnh như:
− Hệ toạ độ thiết bị (Device coordinate system)
− Hệ toạ độ toàn màn hình (Full screen coordinate system)
− Hệ toạ độ vùng client (Client area coordinate system)
− Hệ toạ độ toàn cửa sổ (Whole window coordinate system)
− Hệ toạ độ logic (Logical coordinate system)
Trong phạm vi ứng dụng của đề tài chúng tôi không quan tâm đến hệ toạ độ thiết bị
Trang 12CHƯƠNG II : TÌM HIỂU VỀ
HOOKS
Hook là một cơ chế cực mạnh cho phép ta cài đặt một thủ tục để điều khiển hoặc chận hứng các thông điệp trước khi các thông điệp này tới được nơi tiếp nhận.
Hay nói một cách khác hook là một điểm trong kỹ thuật message-handling hệ thống, nơi mà một ứng dụng có thể đặt một thủ tục để quản lý sự lưu thông của các thông điệp trong hệ thống và xử lý một kiểu thông báo nào đó trước khi chúng tới được thủ tục cửa sổ đích.
Trang 13CHÖÔNG II : TÌM HIEÅU VEÀ
Trang 14CHƯƠNG III : KỸ THUẬT
OVERRIDE HÀM API
Override có nghĩa là: Thay thế một giá trị lúc run-time cho một giá trị đã có trong tập tin hoặc trong chương trình Hoặc tạo ra một đáp ứng lúc run-time thay cho tình huống dự kiến trong chương trình
Trang 15CHƯƠNG III : KỸ THUẬT
OVERRIDE HÀM API
Đối với các hàm giao tiếp trong môi trường Windows thì khi Windows gọi đến các DLL (Dynamic Link Library – Thư viện liên kết động) tại các điểm nhập của các hàm Kernel, User, GDI… để xử lý các hàm được gọi trong ứng dụng thì chính ở thời điểm này ta có thể chen vào để có thể thực hiện việc hoàn tất bất kỳ thao tác xử lý gì Việc chen vào ở thời điểm đó sẽ có 2 cách như sau dựa vào thời điểm để chen vào:
Trang 16CHƯƠNG III : KỸ THUẬT
OVERRIDE HÀM API
- Cách 1 : chen vào trước khi hàm API bị gọi được thi hành (front-end processing)
- Cách 2 : sau khi hàm API đã kết thúc việc thực thi thì ta cho chen vào dẫn đến việc thực thi một thao tác gì hoặc một công việc theo yêu cầu của ta (back- end processing).
Trang 17CHƯƠNG III : KỸ THUẬT
OVERRIDE HÀM API
Như vậy override các hàm thuộc giao tiếp Windows là một kỹ thuật cho phép developer can thiệp vào tiến trình gọi hàm API nhằm thực hiện một thao tác, một công việc gì đó theo mục đích của developer trước khi quá trình thực thi hàm API bắt đầu (theo cách 1) hoặc là ngay sau khi đã kết thúc việc thực thi hàm API (theo cách 2).
Trang 18CHƯƠNG IV : KẾT XUẤT VĂN
BẢN TRONG WINDOWS
Kết xuất văn bản theo GDI hoàn toàn khác với kết xuất trên môi trường lập trình cổ điển DOS, vì GDI coi văn bản như là một loại đối tượng đồ họa Cách tiếp cận để kết xuất văn bản của GDI có thể được gọi là kết xuất thiên về pixel (pixel oriented output), GDI sử dụng khung lưới pixel để cho ta xuất văn bản và ta có thể xuất văn bản ở bất kỳ vị trí nào trên cửa sổ Và
do coi văn bản như là một đối tượng đồ họa nên
ta có thể dễ dàng trộn văn bản với các đối tượng đồ họa khác.
Trang 19CHƯƠNG IV : KẾT XUẤT VĂN
BẢN TRONG WINDOWS
Nhưng khác với các đối tượng đồ họa khác ta phải dùng phông chữ (font) để xuất văn bản Font là một đối tượng của GDI dùng để định nghĩa những ký tự để xuất ra trong một chương trình Windows Font thường là một căn cứ dữ liệu họa tiết mô tả hình dáng và kích thước của mỗi chữ cái, số và dấu Mỗi thiết bị GDI đều có thể hỗ trợ được một hoặc nhiều font.
Trang 20CHƯƠNG V : PHÂN TÍCH VÀ
THIẾT KẾ CHƯƠNG TRÌNH
Mục đích yêu cầu của đề tài là:
"Nhận dạng từ dưới cursor mouse trên desktop window" Có nghĩa là tại một vị trí bất kỳ nào đó của cursor mouse trên màn hình Windows nếu có một tác động chuột quy định trước (chẳng hạn như click nút phải của chuột) thì phải lấy được từ ở ngay dưới vị trí cursor (nếu có), hoặc xuất
ra thông báo cho biết không có từ nào nằm ngay dưới vị trí cursor đang đứng.
Trang 21CHƯƠNG V : PHÂN TÍCH VÀ
THIẾT KẾ CHƯƠNG TRÌNH
- Có 2 dạng thể hiện văn bản trên màn hình Windows, đó là:
* Thể hiện dưới dạng ảnh, dùng hàm kết xuất và xử lý ảnh
* Thể hiện dưới dạng chuỗi văn bản, dùng hàm kết xuất văn bản
Trang 22CHƯƠNG V : PHÂN TÍCH VÀ THIẾT KẾ CHƯƠNG TRÌNH
Đối với dạng thể hiện ảnh, văn bản chỉ là tập các điểm ảnh của bức ảnh, chẳng có ý nghĩa gì khác đối với Windows, nên nếu muốn trích văn bản
ra chỉ có một cách là xử lý ảnh, điều này thực sự là một vấn đề hay và có nhiều ứng dụng thực tiễn: như nhận dạng một trang giấy được scan vào máy để tạo ra file text tương ứng thay cho việc đánh máy lại trang giấy đó Tuy nhiên nó là vấn đề hết sức phức tạp có sai số nhất định, và tùy thuộc vào font chữ mà văn bản thể hiện, trong khi đó có một cách khác để lấy đượïc chính xác các dòng text trên màn hình
Trang 23CHƯƠNG V : PHÂN TÍCH VÀ
THIẾT KẾ CHƯƠNG TRÌNH
Đối với dạng thể hiện văn bản bằng các hàm kết xuất văn bản : Ứng dụng sẽ gởi cho Windows chuỗi văn bản cần thể hiện và các thông số cần thiết, và Windows dùng các hàm kết xuất văn bản để vẽ chuỗi văn bản đó ra màn hình Từ cách kết xuất đó đã nảy sinh một ý tưởng về việc nhận dạng các dòng text trên màn hình: là nếu ta có thể khống chế các hàm kết xuất văn bản, lấy về các thông tin của các hàm này, thì vấn đề có thể thực hiện được mà không cần phải xử lý ảnh.
Trang 24CHƯƠNG V : PHÂN TÍCH VÀ
THIẾT KẾ CHƯƠNG TRÌNH
Từ những phân tích trên chúng tôi thiết kế chương trình như sau:
- Tổ chức làm 2 projects:
GETTEXT.MAK : Là chương trình chính, tạo khung giao diện và xử lý menu Khi biên dịch sẽ là GETTEXT.EXE
GTDLL.MAK : Chứa các hàm và biến nhớ thực hiện việc cài đặt / gỡ bỏ bẫy sự kiện chuột; cài đặt / gỡ bỏ override; hàm override; hàm trích từ Nói chung là tất cả phần xử lý còn lại Khi biên dịch sẽ là GTDLL.DLL
Trang 25KẾT QUẢ VÀ HƯỚNG
PHÁT TRIỂN
Chương trình GETTEXT đã bước đầu đáp ứng được yêu cầu của đề tài đặt ra : Nhận dạng được các từ hiển thị trên màn hình.
Tuy nhiên, do kỹ thuật override chỉ mới thực hiện được trong môi trường Windows 16 bits, nên chương trình này chỉ chạy được trên môi trường Windows 16bits.
Trang 26KẾT QUẢ VÀ HƯỚNG
PHÁT TRIỂN
Trong môi trường Windows 9x, là môi trường lai tạp giữa 16bits và 32bits, nên chương trình chỉ nhận dạng được khi dòng văn bản được xuất bởi các hàm kết xuất văn bản của môi trường 16bits (như TextOut, ExtTextOut), còn đối với văn bản được kết xuất bởi các hàm của môi trường 32bits (như TextOutA, ExtTextOutA - được dùng để kết xuất văn bản trong các phầm mềm 32bits như Microsoft Office 97) thì chương trình không thể nhận dạng được Dù vậy điều mà đề tài đã đạt được là đưa ra được một giải thuật khung sườn mang tính khả thi, có thể phát triển hoàn chỉnh trong tương lai