WEB开发网
开发学院软件开发VC MS Active Accessibility 接口技术编程尝试 阅读

MS Active Accessibility 接口技术编程尝试

 2006-07-20 11:39:00 来源:WEB开发网   
核心提示: 好,我们言归正传,MS Active Accessibility 接口技术编程尝试(3),来介绍如何得到 IAccessible 接口指针,前面已经提到过 AccessibleObjectFromWindow 这个 Active Accessibility 提供的函数,paccMainWi

好,我们言归正传,来介绍如何得到 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 接口指针!!

上一页  1 2 3 4 5 6 7 8  下一页

Tags:MS Active Accessibility

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接