MS Active Accessibility 接口技术编程尝试
2006-07-20 11:39:00 来源:WEB开发网好,我们言归正传,来介绍如何得到 IAccessible 接口指针。前面已经提到过 AccessibleObjectFromWindow 这个 Active Accessibility 提供的函数,从字面上大家可以看出是通过窗口来得到对应的 IAccessible 接口指针。
因为 IAccessible 接口的数量比窗口要多(因为大多数--但不是全部--COMCTL32 控件都有被 OLEACC.DLL 支持的 IAccessible 接口。),使用 Win32 函数来搜索一个窗口将会比使用 Active Accessibility 树搜索与该窗口相应的 IAccessible 接口要占用少得多的时间。这就意味着为了提高性能,你应该使用 FindWindow 和 EnumWindows 这样的 Win32 函数来找到与希望的UI元素最接近的窗口。当然,在权衡 Win32 函数和 Active Accessibility 函数时,上面的规则只是使用它们的一般标准而不能盲目的遵照执行,重要的是理解它们的本来意义。
下面结合代码介绍一下它的用法。
我们来得到下面运行窗口的 IAccessible 接口指针。
图一
HWND hWndMainWindow;
IAccessible *paccMainWindow = NULL;
HRESULT hr;
//得到标题为"运行"的窗口的句柄
if(NULL == (hWndMainWindow = FindWindow(NULL, "运行")))
{
MessageBox(NULL, "没有发现窗口!", "错误", MB_OK);
}
else
{
//通过窗口句柄得到窗口的 IAccessible 接口指针。
if(S_OK == (hr = AccessibleObjectFromWindow(hWndMainWindow,
OBJID_WINDOW,
IID_IAccessible,
(void**)&paccMainWindow)))
{
//……我们可以通过这个指针paccMainWindow进行操作。
paccMainWindow->Release();
}
}
现在我们已经得到窗口的 IAccessible 接口指针了(paccMainWindow),那么,我们可以干什么呢?我们怎么得到窗口中某个控件的 IAccessible 接口指针呢?我们就以上面的运行窗口为例。看看如何得到文本框的 IAccessible 接口指针!!
Tags:MS Active Accessibility
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接