Nghiên cứu phương pháp nhận dạng từ dưới chuột trên desktop - Ứng dụng thực tế

Nghiên cứu nhận dạng chữ viết tay trực tiếp từ thao tác chuột trên máy tính. Khám phá các ứng dụng tiềm năng và ưu điểm của công nghệ này.

Trường đại học

Trường Đại học Phan Thiết

Chuyên ngành

Công nghệ Thông tin

Người đăng

Ẩn danh

Thể loại

Báo cáo tổng kết đề tài nghiên cứu khoa học sinh viên

2020

76
2
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI MỞ ĐẦU

1. CHƯƠNG 1: TÌM HIỂU VỀ LẬP TRÌNH WINDOWS

1.1. I. Khái quát về lập trình trong Windows

1.2. II. Thông điệp và xử lý thông điệp

1.3. III. Giao diện thiết bị đồ họa GDI

1.4. IV. Cửa sổ trong Windows

1.5. V. Chương trình Windows tiếp nhận thông điệp chuột

2. CHƯƠNG 2: TÌM HIỂU VỀ HOOK

2.1. 1 - Chuỗi hook

2.2. 2 - Thủ tục hook

2.3. 3 - Các loại hook

2.4. 4 - Sử dụng hook

2.5. 5 - Hook trong Windows 3.x

2.6. 6 - Giới thiệu một số hàm liên quan đến hook

3. CHƯƠNG 3: KỸ THUẬT OVERRIDE HÀM API

3.1. I. Khái quát về kỹ thuật override

3.2. II. Lý do sử dụng kỹ thuật override trong lập trình Windows

3.3. III. Cơ chế hoạt động và quản lý bộ nhớ trên Windows 16bits

3.4. IV. Cơ chế hoạt động và quản lý bộ nhớ trên Windows 32bits

3.5. V. Hiện thực kỹ thuật override trên Windows 16bits

3.6. VI. Một số hàm được sử dụng trong kỹ thuật override

4. CHƯƠNG 4: KẾT XUẤT VĂN BẢN TRONG WINDOWS

4.1. I. Kết xuất văn bản trong Windows

4.2. II. Các hàm căn bản để kết xuất văn bản

5. CHƯƠNG 5: PHÂN TÍCH VÀ THIẾT KẾ CHƯƠNG TRÌNH

5.1. I. Phân tích vấn đề

5.2. II. Thiết kế chương trình

5.3. III. Giới thiệu một số hàm có liên quan

5.4. IV. Giới thiệu một số cấu trúc dữ liệu có liên quan

KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Tóm tắt

I. Tổng Quan Về Nhận Dạng Từ Dưới Chuột Trên Desktop

Ngày nay, máy tính đã trở thành công cụ thiết yếu trong cuộc sống và công việc. Việc soạn thảo văn bản, gửi email, tra cứu thông tin trên Internet là những hoạt động thường nhật. Nhu cầu tìm hiểu ý nghĩa của một từ, dịch một đoạn văn bản xuất hiện thường xuyên. Do đó, nhận dạng từ trên màn hình, đặc biệt là trong môi trường Windows, là một yêu cầu thực tế và có ý nghĩa. Nghiên cứu này tập trung vào nhận dạng từ dưới chuột ở dạng text trên desktop Windows, sau đó hiển thị kết quả. Nhóm nghiên cứu đã tìm hiểu cơ chế hoạt động của hệ điều hành Windows, phương thức lập trình trong môi trường Windows, kỹ thuật override các hàm giao tiếp của Windows ở chế độ 16 bit và 32 bit, cách xử lý các thông điệp và kết xuất văn bản. Bước đầu, một ứng dụng có khả năng nhận dạng từ trên nền Windows 16 bit đã được xây dựng bằng Visual C++ version 1.5. Hướng phát triển tiếp theo là hiện thực nó trên nền Win32. Báo cáo này trình bày chi tiết quá trình nghiên cứu, phân tích, thiết kế chương trình, mã nguồn và những vấn đề còn tồn tại, hướng phát triển trong tương lai. Tài liệu tham khảo chính là báo cáo tổng kết đề tài nghiên cứu khoa học sinh viên của Trường Đại học Phan Thiết. Việc nhận dạng từ trực tiếp trên ứng dụng đang dùng sẽ rất thuận tiện cho người sử dụng, chỉ cần click chuột vào từ cần tra cứu, không cần mở từ điển theo kiểu cổ điển. Từ đó, có thể xây dựng các ứng dụng từ điển tương tác trực tiếp hữu ích.

1.1. Lợi Ích Của Việc Nhận Dạng Từ Dưới Chuột Desktop

Việc nhận dạng từ dưới chuột mang lại nhiều lợi ích thiết thực. Nó giúp người dùng nhanh chóng tìm hiểu ý nghĩa của từ, dịch văn bản mà không cần rời khỏi ứng dụng đang sử dụng. Thao tác đơn giản, chỉ cần di chuột và click vào từ cần tra cứu. Tiết kiệm thời gian và nâng cao hiệu quả làm việc. Ứng dụng có thể được tích hợp vào nhiều loại phần mềm khác nhau, từ soạn thảo văn bản đến trình duyệt web. Ngoài ra, việc nhận dạng từ còn là nền tảng để phát triển các công cụ hỗ trợ học tập, dịch thuật và tiếp cận thông tin. Nghiên cứu này tập trung vào môi trường Windows, một hệ điều hành phổ biến. Kết quả nghiên cứu có thể được áp dụng rộng rãi, mang lại lợi ích cho nhiều người dùng.

1.2. Các Phương Pháp Nhận Dạng Từ Dưới Chuột Hiện Nay

Hiện nay, có nhiều phương pháp nhận dạng từ dưới chuột được sử dụng. Một số phương pháp dựa trên công nghệ OCR (Optical Character Recognition) để chuyển đổi hình ảnh thành văn bản. Các phương pháp khác sử dụng API của hệ điều hành để lấy thông tin về từ đang được trỏ chuột tới. Mỗi phương pháp có ưu và nhược điểm riêng. Việc lựa chọn phương pháp phù hợp phụ thuộc vào yêu cầu cụ thể của ứng dụng và khả năng của hệ thống. Nghiên cứu này tập trung vào phương pháp sử dụng API của Windows để nhận dạng từ trực tiếp từ màn hình desktop.

II. Thách Thức Trong Nhận Dạng Từ Dưới Chuột Trên Desktop

Việc nhận dạng từ dưới chuột trên desktop không phải là một nhiệm vụ đơn giản. Có nhiều thách thức cần vượt qua. Đầu tiên, cần xác định chính xác vị trí của chuột trên màn hình. Thứ hai, cần lấy thông tin về từ đang được trỏ chuột tới từ hệ thống. Thứ ba, cần xử lý các trường hợp đặc biệt, như từ nằm trong hình ảnh, từ bị che khuất, hoặc từ có định dạng phức tạp. Thứ tư, cần đảm bảo hiệu suất của ứng dụng, để không làm chậm hệ thống. Ngoài ra, còn có vấn đề tương thích với các phiên bản Windows khác nhau. Việc nhận dạng từ trong môi trường Windows 16 bit khác với Windows 32 bit, do cơ chế quản lý bộ nhớ khác nhau. Cần có giải pháp phù hợp cho từng môi trường.

2.1. Khó Khăn Về Mặt Kỹ Thuật Khi Triển Khai Nhận Dạng Từ

Các thách thức kỹ thuật trong việc nhận dạng từ dưới chuột rất đa dạng. Việc lấy tọa độ chuột chính xác, đặc biệt trên các màn hình có độ phân giải cao, đòi hỏi thuật toán hiệu quả. Việc trích xuất văn bản từ các ứng dụng khác nhau có thể gặp khó khăn do sự khác biệt trong cách hiển thị và lưu trữ văn bản. Xử lý các trường hợp từ bị định dạng đặc biệt, như in đậm, in nghiêng, hoặc có màu sắc khác nhau, đòi hỏi khả năng phân tích văn bản mạnh mẽ. Việc đảm bảo ứng dụng hoạt động mượt mà, không gây tốn tài nguyên hệ thống, là một yêu cầu quan trọng. Cuối cùng, việc duy trì tính tương thích với các phiên bản Windows khác nhau đòi hỏi sự đầu tư liên tục vào phát triển và kiểm thử.

2.2. Vấn Đề Hiệu Suất Và Tài Nguyên Hệ Thống Trong Nhận Dạng Từ

Hiệu suất và tài nguyên hệ thống là những yếu tố quan trọng cần xem xét khi phát triển ứng dụng nhận dạng từ dưới chuột. Việc liên tục theo dõi vị trí chuột và trích xuất văn bản có thể tiêu tốn đáng kể tài nguyên CPU và bộ nhớ. Điều này có thể dẫn đến tình trạng chậm chạp, giật lag, ảnh hưởng đến trải nghiệm người dùng. Cần có các biện pháp tối ưu hóa để giảm thiểu tác động đến hiệu suất hệ thống. Ví dụ, có thể sử dụng các thuật toán hiệu quả, chỉ trích xuất văn bản khi thực sự cần thiết, và sử dụng bộ nhớ đệm để lưu trữ các kết quả nhận dạng từ trước đó. Ngoài ra, cần kiểm tra và tối ưu hóa ứng dụng trên các cấu hình phần cứng khác nhau, để đảm bảo ứng dụng hoạt động tốt trên mọi hệ thống.

III. Phương Pháp Override Hàm API Để Nhận Dạng Từ Dưới Chuột

Một trong những phương pháp chính để nhận dạng từ dưới chuột là sử dụng kỹ thuật override hàm API của Windows. Kỹ thuật này cho phép can thiệp vào quá trình gọi hàm API, thực hiện các thao tác xử lý trước hoặc sau khi hàm API được gọi. Trong trường hợp nhận dạng từ, có thể override các hàm xuất văn bản, như TextOut() và ExtTextOut(), để lấy thông tin về từ đang được hiển thị trên màn hình. Sau đó, có thể sử dụng thông tin này để nhận dạng từ và hiển thị kết quả. Kỹ thuật override hàm API đòi hỏi kiến thức sâu về hệ điều hành Windows và các hàm API liên quan. Tuy nhiên, nó mang lại khả năng kiểm soát cao và hiệu suất tốt.

3.1. Cơ Chế Hoạt Động Của Kỹ Thuật Override Hàm API Windows

Kỹ thuật override hàm API hoạt động bằng cách thay đổi địa chỉ của hàm API trong bảng import address table (IAT) của một module. IAT là một bảng chứa địa chỉ của tất cả các hàm API mà một module sử dụng. Khi một module gọi một hàm API, hệ điều hành sẽ tìm địa chỉ của hàm trong IAT và chuyển điều khiển đến địa chỉ đó. Bằng cách thay đổi địa chỉ trong IAT, có thể chuyển điều khiển đến một hàm override thay vì hàm API gốc. Hàm override có thể thực hiện các thao tác xử lý cần thiết, sau đó gọi hàm API gốc hoặc trả về kết quả trực tiếp. Cơ chế này cho phép can thiệp vào quá trình gọi hàm API một cách linh hoạt và hiệu quả.

3.2. Các Bước Thực Hiện Override Hàm API Trong Windows 16bit

Trong Windows 16 bit, việc override hàm API bao gồm các bước sau: 1. Xác định địa chỉ của hàm API cần override. 2. Lưu trữ 5 byte đầu tiên của hàm API gốc. 3. Thay đổi thuộc tính của segment chứa hàm API từ code sang data. 4. Ghi đè 5 byte đầu tiên của hàm API bằng lệnh JMP đến địa chỉ của hàm override. 5. Khi cần gỡ bỏ override, khôi phục 5 byte đầu tiên của hàm API gốc. Trong Windows 32 bit, quá trình override phức tạp hơn do cơ chế quản lý bộ nhớ khác nhau. Tuy nhiên, ý tưởng cơ bản vẫn là thay đổi địa chỉ của hàm API trong IAT.

IV. Ứng Dụng Nghiên Cứu Nhận Dạng Từ Dưới Chuột Trong Từ Điển

Kết quả nghiên cứu về nhận dạng từ dưới chuột có thể được ứng dụng để xây dựng các ứng dụng từ điển tương tác trực tiếp. Người dùng chỉ cần di chuột và click vào từ cần tra cứu, từ điển sẽ tự động hiển thị nghĩa của từ. Ứng dụng này sẽ rất thuận tiện cho người sử dụng, giúp tiết kiệm thời gian và nâng cao hiệu quả học tập. Ứng dụng có thể được tích hợp vào nhiều loại phần mềm khác nhau, từ soạn thảo văn bản đến trình duyệt web. Ngoài ra, nó còn có thể được sử dụng để xây dựng các công cụ hỗ trợ dịch thuật và tiếp cận thông tin.

4.1. Xây Dựng Từ Điển Tương Tác Trực Tiếp Với Ứng Dụng Nhận Dạng

Việc xây dựng một từ điển tương tác trực tiếp với khả năng nhận dạng từ dưới chuột mang lại trải nghiệm người dùng liền mạch và hiệu quả. Khi người dùng di chuột qua một từ, từ điển có thể hiển thị nghĩa của từ trong một cửa sổ pop-up nhỏ, cung cấp thông tin nhanh chóng mà không làm gián đoạn luồng công việc. Ngoài ra, từ điển có thể cung cấp các tùy chọn nâng cao, như phát âm từ, hiển thị các ví dụ sử dụng, hoặc liên kết đến các nguồn thông tin khác. Việc tích hợp từ điển vào các ứng dụng khác nhau, như trình duyệt web, trình soạn thảo văn bản, hoặc ứng dụng đọc sách, sẽ mang lại lợi ích cho nhiều người dùng.

4.2. Các Tính Năng Mở Rộng Của Ứng Dụng Nhận Dạng Từ Trong Tương Lai

Trong tương lai, ứng dụng nhận dạng từ dưới chuột có thể được mở rộng với nhiều tính năng hữu ích. Ví dụ, có thể tích hợp công nghệ dịch máy để dịch văn bản trực tiếp trên màn hình. Có thể hỗ trợ nhiều ngôn ngữ khác nhau, cung cấp thông tin ngữ pháp, hoặc gợi ý các từ đồng nghĩa. Ngoài ra, có thể tích hợp công nghệ học máy để cải thiện khả năng nhận dạng từ và cung cấp các thông tin cá nhân hóa cho người dùng. Việc liên tục phát triển và cải tiến ứng dụng sẽ mang lại nhiều lợi ích cho người dùng.

V. Kết Luận Và Hướng Phát Triển Của Nhận Dạng Từ Dưới Chuột

Nghiên cứu về nhận dạng từ dưới chuột trên desktop là một lĩnh vực đầy tiềm năng. Kết quả nghiên cứu có thể được ứng dụng để xây dựng các ứng dụng từ điển tương tác trực tiếp, các công cụ hỗ trợ học tập, dịch thuật và tiếp cận thông tin. Tuy nhiên, vẫn còn nhiều thách thức cần vượt qua, như đảm bảo hiệu suất, tính tương thích và khả năng xử lý các trường hợp đặc biệt. Hướng phát triển tiếp theo là nghiên cứu các phương pháp override hàm API hiệu quả hơn trong môi trường Windows 32 bit, tích hợp công nghệ học máy để cải thiện khả năng nhận dạng từ, và hỗ trợ nhiều ngôn ngữ khác nhau.

5.1. Đánh Giá Những Thành Công Đạt Được Trong Nghiên Cứu

Nghiên cứu đã đạt được những thành công nhất định trong việc nhận dạng từ dưới chuột trên desktop. Nhóm nghiên cứu đã tìm hiểu sâu về cơ chế hoạt động của hệ điều hành Windows, các hàm API liên quan, và kỹ thuật override hàm API. Một ứng dụng có khả năng nhận dạng từ trên nền Windows 16 bit đã được xây dựng. Các kết quả nghiên cứu là nền tảng quan trọng để phát triển các ứng dụng từ điển tương tác trực tiếp và các công cụ hỗ trợ học tập.

5.2. Các Bước Nghiên Cứu Tiếp Theo Để Hoàn Thiện Ứng Dụng Nhận Dạng

Các bước nghiên cứu tiếp theo để hoàn thiện ứng dụng nhận dạng từ dưới chuột bao gồm: 1. Nghiên cứu các phương pháp override hàm API hiệu quả hơn trong môi trường Windows 32 bit. 2. Tích hợp công nghệ học máy để cải thiện khả năng nhận dạng từ, đặc biệt trong các trường hợp từ có định dạng phức tạp hoặc nằm trong hình ảnh. 3. Hỗ trợ nhiều ngôn ngữ khác nhau, cung cấp thông tin ngữ pháp và gợi ý các từ đồng nghĩa. 4. Tối ưu hóa hiệu suất của ứng dụng để đảm bảo hoạt động mượt mà trên mọi hệ thống. 5. Kiểm tra và cải thiện tính tương thích của ứng dụng với các phiên bản Windows khác nhau.

22/09/2025

Trích đoạn nội dung tài liệu

Chương 1: TÌM HIỂU VỀ LẬP TRÌNH WINDOWS I - KHÁI QUÁT VỀ LẬP TRÌNH TRONG WINDOWS: 1.1 1 - Khái quát 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. 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. Có thể nói Windows đã mở ra cho người lập trình không gian rộng lớn để phát triển ứng dụng, và hạn chế không gian phát triển hệ thống.

Điều này dẫn đến hệ quả là các ứng dụng được tạo ra hết sức dễ dàng, và quan trọng là hệ thống chạy ổn định hơn, không bị treo do lỗi của ứng dụng, không thể xâm nhập, nhưng sẽ rất khó khăn nếu người lập trình muốn trực tiếp điều khiển hoạt động trong máy và phát triển về lập trình hệ thống. - Tìm hiểu hàm Windows API: Windows là một hệ điều hành đa nhiệm (multitasking) mà qua đó các ứng dụng ở trong môi trường Windows sẽ giao tiếp với user thông qua một hay nhiều giao diện. Để truy cập các giao diện này thì các ứng dụng được xây dựng trên môi trường Windows sẽ sử dụng tập các hàm được gọi là giao diện chương trình ứng dụng API (Application Program Interface). Chương trình của người sử dụng có thể gọi tới các hàm API để truy cập tới mọi tài nguyên của Windows.

GDI là một bộ phận của API, giao diện thiết bị đồ họa GDI (Graphic Device Interface) có nhiệm vụ duy trì sự độc lập của Windows đối với các thiết bị đồ họa hay còn gọi là khả năng độc lập thiết bị (device independent) tức là cho phép Windows làm việc với nhiều kiểu thiết bị đồ họa khác nhau.2 2 - Thư viện liên kết động DLL (Dynamic Link Library): Thư viện liên kết động là các tập tin được Windows lưu dưới dạng nhị phân chứa các hàm mà mọi ứng dụng trên Windows đều có thể sử dụng. Nét đặc trưng của DLL là nó có thể được sử dụng bởi nhiều ứng dụng tại cùng một thời điểm hay nói cách khác thư viện liên kết động có thể cùng một lúc được gọi bởi nhiều chương trình. DLL là một dữ liệu chia sẻ được (shared data). 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. Windows sử dụng cấu trúc thư viện liên kết động DLL (Dynamic Link Library) nhằm mục đích không sao chép một khối lượng lớn các mã vào trong chương trình như ở các thư viện thông thường.

Nhờ cấu trúc động của DLL nên mọi chương trình đều có thể truy cập thư viện trong thời gian thực thi. Các hàm API được Windows giữ dưới dạng hỗn hợp trong một số DLL. Trong quá trình dịch khi gặp lệnh gọi hàm API từ chương trình ứng dụng thì chương trình dịch không thêm mã này vào module thực hiện mà chỉ thêm các lệnh liên kết (chứa tên của DLL bên trong có hàm cần nạp) và tên hàm đó. Khi thực thi chương trình thì hàm API thực sự mới được nạp vào bộ nhớ để thực hiện.

Cùng với sự phát triển của Windows là sự phát triển của lập trình hướng đối tượng, và để hỗ trợ cho việc lập trình hướng đối tượng, Microsoft đã cung cấp cho người lập trình một bộ thư viện các lớp cơ bản để phát triển các ứng dụng hướng đối tượng gọi là MFC (Microsoft Foundation Classes), nội dung của nó bao gồm thông tin về các lớp cơ bản được chuẩn hóa như lớp application; document; view; OLE; cửa sổ; nút bấm; text; v.v…, trong các lớp này mọi thứ liên quan đến nó (bao gồm dữ liệu và các chương trình xử lý của nó) đều được làm hoàn chỉnh, người lập trình chỉ việc lấy ra sử dụng, hoặc có thể thêm bớt một ít tính năng đặc trưng cho đối tượng của mình. Mục tiêu chính của MFC là hệ thống hóa các hàm API, cung cấp một thể thức gọi gọn các hàm API, cung cấp một “khung làm việc” (framework) cực mạnh để người lập trình không cần phải quan tâm đến những đoạn chương trình thuộc về “thủ tục” mà chỉ cần quan tâm đến phần cốt lõi để đạt được mục đích. II - THÔNG ĐIỆP VÀ XỬ LÝ THÔNG ĐIỆP: 1.3 1 - Khái niệm: 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. 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ì đó.4 2 - Gởi đi các thông điệp: 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: 1.1 a) Hàm SendMessage: Cú pháp: LRESULT SendMessage(hwnd, uMsg, wParam, lParam) HWND hwnd; // handle của cửa sổ nhận (đích) UINT uMsg; // thông điệp để gởi WPARAM wParam; // thông số thông điệp đầu tiên LPARAM lParam; // thông số thông điệp thứ hai - Hàm SendMessage gởi thông điệp tới một hay nhiều cửa sổ. Hàm gọi thủ tục cửa sổ cho cửa sổ và không trở về cho đến lúc thủ tục cửa sổ đã xử lý thông điệp.

- Giá trị trả về: cho biết kết quả xử lý thông điệp và phụ thuộc vào thông điệp được gởi.2 b) Hàm PostMessage: - Cú pháp: BOOL PostMessage(hwnd, uMsg, wParam, lParam) HWND hwnd; // handle của của sổ đích UINT uMsg; // thông điệp gởi WPARAM wParam; // thông số thông điệp đầu tiên LPARAM lParam; // thông số thông điệp thứ hai - Hàm PostMessage gởi (đặt) một thông điệp vào trong hàng thông điệp cửa sổ và rồi trở về mà không đợi cửa sổ tương ứng xử lý thông điệp. Những thông điệp trong một hàng thông điệp được lấy bằng cách gọi hàm SetMessage hay PeekMessage. - Giá trị trả về: trả về khác 0 nếu thành công, ngược lại 0.3 c) Hàm SendDlgItemMessage: - Cú pháp: LRESULT SendDlgItemMessage(hwndDlg,idDlgItem,uMsg,wParam,lParam) HWND hwndDlg; // handle của hộp hội thoại int idDlgItem; // mã nhận diện ô điều khiển sẽ nhận thông điệp UINT uMsg; // thông điệp gởi đi WPARAM wParam; // thông số thông điệp đầu tiên LPARAM lParam; // thông số thông điệp thứ hai - Hàm SendDlgItemMessage gởi một thông điệp tới một điều khiển trong hộp hội thoại. - Giá trị trả về: cho biết kết quả xử lý thông điệp và phụ thuộc vào thông điệp được gởi.5 3 - Vòng lặp thông điệp: Một thread hoặc một process đẩy một thông điệp ra khỏi hàng đợi bằng cách dùng vòng lặp thông điệp.

Vòng loop chính của một ứng dụng đặt tại cuối hàm WinMain() của ứng dụng đó. Vòng lặp thông điệp có dạng như sau: while GetMessage(&msg,NULL,0,0) { TranslateMessage(&msg); DispatchMessage(&msg); } Sau đây là Sơ đồ dòng thông điệp: Hardware Event Occur System Message Queue System Dispatcher System Dispatcher Thread1 Message Queue Thread2 Message Queue Thread3 Message Queue Thread1 Hook Thread2 Hook Thread3 Hook GetMessage() GetMessage() GetMessage() TranslateMessage() TranslateMessage() TranslateMessage() Dispatch Message() Dispatch Message() Dispatch Message() WndProc() WndProc() WndProc() DefWndProc() DefWndProc() DefWndProc() Nó mô tả đơn giản hóa quá trình xử lý thông điệp. Thông điệp có thể bắt nguồn từ nhiều cách khác nhau, sơ đồ sau đây sẽ giải thích chi tiết hơn về vòng lặp thông điệp và chỉ ra cách thông điệp được đặt vào hàng đợi như thế nào: Hardware Events Other threads PostMessage() System Message Queue Other threads PostMessage() System Dispatcher Message Sent From Other Threads SentMessage() Thread Message Queue PostMessage() (To Another Thread) TranslateMessage() Message Loop SentMessage() WndProc() Thông điệp không chỉ phát xuất từ sự kiện phần cứng, cũng có thể có thông điệp của chương trình phát xuất từ một chương trình đang chạy. Các threads có thể gởi dữ liệu trở về sau và về trước bằng cách gởi thông điệp.

Thông điệp có thể gởi vào hàng đợi bằng hàm PostMessage() , hoặc chúng có thể được gởi trực tiếp cho vòng lặp thông điệp để xử lý ngay lập tức bằng hàm SendMessage().6 4 - Xử lý thông điệp: Việc xử lý thông điệp là yếu tố chính làm cho các ứng dụng Windows vận hành được. Hệ thống và các ứng dụng khác sinh ra các thông điệp cho mọi sự kiện xuất hiện trong hệ thống thông điệp của Windows sẽ cho phép Windows chạy đa nhiệm trong một thời điểm. Windows 95 và Windows NT mở rộng khả năng của version Windows trước bằng việc cấp phát cho mỗi dòng xử lý (thread) hay mỗi tiến trình (proccess) một hàng đợi thông điệp riêng. Trong version Windows cũ thì tất cả ứng dụng đều dùng chung một hàng đợi thông điệp, vì thế để các ứng dụng khác xử lý thông điệp, ứng dụng phải trả quyền điều khiển về cho Windows mỗi khi nó có thể.

Với Windows 95 và Windows NT, điều này không còn nữa. Windows sinh ra thông điệp cho mọi sự kiện phần cứng, ví dụ như người dùng nhấn một phím hoặc di chuyển chuột. Nó gởi thông điệp đến hàng đợi thông điệp của thread thích hợp, nếu thông điệp được dành cho nhiều thread thì nó cũng được đưa vào các hàng đợi của các thread đó.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ