• Thứ Sáu, 17/03/2006 14:00 (GMT+7)

    Đọc chuỗi trên desktop tương tự "Click'n'See"

    Câu hỏi :
    Tôi muốn viết chương trình từ điển kiểu “Click and See”. Tôi đã đọc bài “Nhấn và xem với VB6” trong số báo 10/2004 và bài “Đọc màn hình với VC6” trên số báo 1/2005, tuy nhiên cả hai bài này đều chưa thể giúp tôi hoàn thiện chương trình. Bài viết VC6 chỉ đọc được 1 chuỗi text của phần tử điều khiển chứ không đọc được 1 từ chính xác tại vị trí trỏ chuột.

    Qua tìm hiểu trên Internet, tôi được biết có 2 phương pháp chủ yếu để làm việc này:
    1. Dùng cách như chương trình thí dụ Spy của VC: câu móc, gửi WM..., nhưng cách này chỉ hoạt động tốt với một số đối tượng.
    2. Dùng phương pháp OCR: đọc bitmap vào rồi nhận dạng text.
    Xin hỏi nên dùng cách nào? Tài liệu tham khảo?


    Trả lời :

    Đúng là dùng phương pháp nhận dạng text OCR là tổng quát nhất để xác định chuỗi nằm ở vị trí chuột trên màn hình, tuy nhiên phương pháp OCR có nhiều khuyết điểm như độ phức tạp cao, chạy chậm và độ đúng đắn không triệt để vì chuỗi có thể được hiển thị ở nhiều co chữ và font chữ khác nhau.

    Một phương pháp khá hữu hiệu là dựa vào đặc tính hiển thị chuỗi của các ứng dụng, đó là ứng dụng phải gọi 1 trong các hàm Windows API để hiển thị chuỗi văn bản như hàm TextOut(), TextOutW()... Dựa vào đặc tính trên, ta chỉ cần viết lại (override) các hàm hiển thị chuỗi này để mỗi lần chuỗi được ứng dụng gọi, ngoài việc hiển thị chuỗi lên màn hình, ta còn lưu lại thông tin về chuỗi được hiển thị lên database (nội dung chuỗi, vị trí x,y được hiển thị...). Khi cần nhận dạng xem chuỗi nào đang ở vị trí (x,y) hiện hành của chuột, ta chỉ cần tìm trong database xem record nào có thông số (x,y) gần trùng với tọa độ (x,y) của chuột.

    Qui trình kỹ thuật cụ thể để override 1 hàm Windows API được trình bày trong sách “Advanced Windows: The Developer’s Guide to the Win32 API for Windows X” của Jeffrey Richter (X có thể là Win95, Win NT, Win2000, WinXP), sách này có ở phòng photocopy Khoa CNTT ĐHBK Tp.HCM.

    Chuyên mục: Lập trình