Các cấu trúc dữ liệu này là cấu trúc chuẩn của Windows 3.1, được định nghĩa trong file WINDOWS.H
1 - Cấu trúc TEXTMETRIC:
Cấu trúc TEXTMETRIC chứa thông tin căn bản về font vật lý. Tất cả các kích thước được đưa ra trong các đơn vị luận lý tức là chúng phụ thuộc vào chế độ ánh xạ hiện hành ngữ cảnh màn hình.
Nội dung ý nghĩa của các dữ liệu trong cấu trúc này đã trình bày trong chương 4: Kết xuất văn bản.
2 – Cấu trúc POINT:
- Dùng để định nghĩa tọa độ x, y của một điểm. - Cú pháp:
typedef struct tagPOINT {
LONG x; LONG y; }
3 – Cấu trúc STRUCT:
- Định nghĩa tọa độ các góc upper-left và lower-right của một hình chữ nhật - Cú pháp:
typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT; 4 – Cấu trúc PAINTSTRUCT:
- Dùng chứa thông tin dùng để tô vẽ một client area thuộc cửa sổ. - Cú pháp:
typedef struct tagPAINTSTRUCT { HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BYTE fIncUpdate; BYTE rgbReserved[16]; } PAINTSTRUCT;
- Tham số:
hdc handle của DC cần vẽ
fErase cho biết background có vẽ lại hay không, nếu khác 0 thì tô vẽ còn nếu ngược lại thì không vẽ.
rcPaint góc upper-left và lower-right của hình chữ nhật được vẽ
fRestore dành riêng cho sử dụng nội tại của Windows.
fIncUpdate dành riêng cho sử dụng nội tại của Windows.
RgbResersed[16] khối ký ức dành riêng cho sử dụng nội tại của Windows.
5 – Cấu trúc EVENTMSG:
- Chứa thông tin từ hàng ứng dụng của Windows, được sử dụng để lưu trữ thông tin thông điệp cho hàm callback JornalPlaybackProc.
- Cú pháp:
typedef struct tagEVENTMSG { UINT message; UINT paramL; UINT paramH; DWORD time; } EVENTMSG; - Thông số:
message thông điệp
paramL thông tin thêm vào về thông điệp. Nghĩa chính xác phụ thuộc vào giá trị thông điệp.
paramH thông tin thêm vào về thông điệp. Nghĩa chính xác phụ thuộc vào giá trị thông điệp.
6 – Cấu trúc MSG:
- Chứa thông tin từ hàng ứng dụng cửa sổ. - Cú pháp:
typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; - Thông số:
hwnd cửa sổ nhận thông điệp message ố thông điệp
wParam thông tin thêm vào về thông điệp. Nghĩa chính xác phụ thuộc vào giá trị thông điệp.
lParam thông tin thêm vào về thông điệp. Nghĩa chính xác phụ thuộc vào giá trị thông điệp.
time thời điểm thông điệp được post.
pt vị trí cursor ở tọa độ màn hình khi thông điệp được post.
7 - Cấu trúc SIZE:
- Chứa viewport extents, window extents, text extents, bitmap dimensions, và aspect-ratio filter cho một vài hàm mở rộng
- Cú pháp:
typedef struct tagSIZE {
int cx; int cy;
} SIZE; - Thông số:
cx x-extent khi hàm trả về cy y-extent khi hàm trả về
8 - Cấu trúc MOUSEHOOKSTRUCT:
- Cấu trúc MOUSEHOOKSTRUCT chứa thông tin về một sự kiện chuột - Cú pháp:
typedef struct tagMOUSEHOOKSTRUCT { POINT pt; HWND hwnd; UINT wHitTestCode; DWORD dwExtraInfo; } MOUSEHOOKSTRUCT; - Thông số:
pt một điểm có cấu trúc POINT chứa tọa độ x,y của mouse cursor trong hệ tọa độ màn hình
hwnd cửa sổ sẽ nhận thông điệp chuột tương ứng với sự kiện mouse
wHitTestCode mã hit-test trả về
dwExtraInfo thông tin thêm vào được tổ chức với sự kiện mouse. Một ứng dụng có thể thiết lập thông tin thêm vào này bằng cách gọi hàm sự kiện phần cứng và lấy nó bằng cách gọi hàm GetMessageExtraInfo .
Kết quả và hướng phát triển
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. 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.
Do vậy, để nhận dạng được tất cả các từ xuất hiện trên màn hình Windows thì phải override được các hàm của Windows 32bits. Việc này thực sự là một vấn đề lớn, và cần phải hiểu sâu sắc về Windows, vì Windows có chế độ bảo vệ bộ nhớ rất chặt chẽ, nên không thể ghi xoá vào hàm API như cách mà chương trình đã làm, do đó cần phải có giải thuật khác.
Ngoài ra việc lấy dữ liệu bằng cách override chỉ là một hướng để giải quyết vấn đề, ta cũng có thể thực hiện bằng cách khác như dùng các hàm lấy text mà Windows có hỗ trợ, nhưng có thể vấn đề sẽ phức tạp hơn.