Đồ án Xây dựngThư 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.
26 trang |
Chia sẻ: vietpd | Lượt xem: 1554 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề 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, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BÁ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 NỘ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 CHƯƠNG I : TÌM HIỂU VỀ LẬP TRÌNH WINDOWS KHÁI NIỆM VỀ LẬP TRÌNH TRONG WINDOWS Môi trường lập trình Windows về cơ bản là dựa trên bộ hàm API (Application Programmer Interface), nó có chức năng như các ngắt trong bảng vector ngắt của DOS, nhưng nó thân thiện hơn ở chỗ cách gọi hàm API giống 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. CHƯƠ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. CHƯƠ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. CHƯƠ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. CHƯƠ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ì đó. CHƯƠ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ì đó. CHƯƠ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 CHƯƠNG I : TÌM HIỂU VỀ LẬP TRÌNH WINDOWS 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. CHƯƠ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ị CHƯƠ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. CHƯƠNG II : TÌM HIỂU VỀ HOOKS Do có khả năng can thiệp mạnh nên hook có xu hướng làm chậm lại hệ thống vì chúng làm tăng số lượng các hoạt động của hệ thống đối với mỗi thông điệp. Chỉ đặt hook khi thực sự cần thiết và dỡ bỏ chúng khi không cần đến. CHƯƠ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. CHƯƠ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: CHƯƠ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). CHƯƠ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). CHƯƠ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. CHƯƠ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. CHƯƠ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. CHƯƠ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 CHƯƠ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. CHƯƠ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. CHƯƠ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 KẾ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. KẾ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.