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:
{
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;
} 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 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.
time thời điểm mà thơng điệp được post.
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
{
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.
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
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
Kếếttqquuảảvvààhhưướớnnggpphhááttttrriiểểnn
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 hồ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 xố 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.
Ngồ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.