Thu nhận tham chiếu giao diện AccessibleObject

Một phần của tài liệu phần mềm hỗ trợ người khiếm thị học tiếng anh (Trang 111)

3 TỔNG QUAN VỀ ACTIVE ACCESSIBILITY VÀ HOOK

3.5 Thu nhận tham chiếu giao diện AccessibleObject

Cĩ nhiều cách khác nhau đểứng dụng client truy xuất tham chiếu giao diện IAccessible. Hai cách thường dùng là :

• Sử dụng AccessibleObjectFromEvent

• Sử dụng AccessibleObjectFromPoint

Cĩ nhiều khả năng Server trả về những tham chiếu giao diện khác nhau cho cùng một thành phần UI tại mỗi thời điểm bằng cách dùng AccessibleObjectFromEvent,

AccessibleObjectFromPoint, hoc AccessibleObjectFromWindow. Để xác định xem nếu những tham chiếu cĩ cùng một thành phần UI hay khơng, chúng ta phải so sánh các thuộc tính IAccessible của đối tượng, khơng phải so sánh các địa chỉ của các tham chiếu.

3.5.1 S dng AccessibleObjectFromEvent

Nhiều ứng dụng client muốn truy xuất thơng tin từ các Accessible Object phát sinh ra sự kiện. Active Accessibility cung cấp hàm AccessibleObject để thực hiện điều này.

AccessibleObjectFromEvent nhận lượng tham số từ thủ tục Hook. Khi thủ tục Hook client nhận một thơng báo sự kiện, nĩ truyền những tham số thích hợp từ những sự kiện tới AccessibleObjectFromEvent.

AccessibleObjectFromEvent thu về tham chiếu giao diện IAccessible của thành phần UI phát sinh ra sự kiện hoặc tham chiếu giao diện của đối tượng cấp cha của thành phần. Nếu trả về tham chiếu giao diện của đối tượng cha, client gọi các thuộc tính và phương thức của cấp cha để lấy thơng tin về thành phần con phát sinh ra sự kiện.

3.5.2 S dng AccessibleObjectFromPoint

Để truy xuất giao diện IAccessible của đối tượng tại một điểm nào đĩ trên màn hình, client sử dụng hàm AccessibleObjectFromPoint.

Ví dụ :

Minh họa cách sử dụng AccessibleObjectFromPoint.

Trang 112

// lấy vị trí chuột hiện tại POINT ptCursor

GetCursorPos(&ptCursor); // Khởi tạo các biến IAccessible* pAcc = NULL; HRESULT hr;

VARIANT varChild;

// Kiểm tra tồn tại đối tượng Accessible Object ngay vị trí chuột hr = AccessibleObjectFromPoint(ptCursor, &pAcc, &varChild);

if (hr == S_OK) { // Lấy thuộc tính tên BSTR bstrName = NULL; hr = pAcc->get_accName(varChild, &bstrName); // Nếu thành cơng

if (bstrName && hr == S_OK) {

WideCharToMultiByte(CP_ACP, 0, bstrName,-1, g_szName, cchName, NULL, NULL);

SysFreeString(bstrName); }

}

Một phần của tài liệu phần mềm hỗ trợ người khiếm thị học tiếng anh (Trang 111)