我注意到在Process Monitor中,通过IAccessible(MSAA)接口访问Mozilla Firefox导致文件访问名为“ Accessibility.api”的Adobe Reader文件。当我使用Microsoft的Inspect.exe(使用MSAA)访问Mozilla Firefox时,没有这些文件访问权限。
这是代码(C ++),导致对“ Accessibility.api”文件的大约28次访问:
CComPtr<IAccessible> mainElement;
::AccessibleObjectFromWindow(mainWindowHandle, static_cast<DWORD>(OBJID_CLIENT), IID_IAccessible, reinterpret_cast<void**>(&mainElement));
每次::AccessibleChildren
或IEnumVariant::Next
调用也会导致每个子元素大约28次访问。
如何防止像Inspect.exe这样的文件访问?
我在Chrome上获得了相同的结果。
在这些浏览器中未将Adobe Reader作为插件安装。
我试图重命名Accessible.api文件(位于C:\ Program Files(x86)\ Adobe \ Acrobat Reader DC \ Reader \ plug_ins \ Accessibility.api中)以将其禁用,但此后我无法访问浏览器元素了。生成的子元素有所不同。 Inspect.exe(使用MSAA)或Ranorex Spy(不带浏览器扩展名)没有这些问题。我也用AccProbe检查了结果,该工具产生了与我相同的结果。
这似乎仅影响32位应用程序。 Inspect.exe和Ranorex Spy是64位应用程序。我的应用程序以及AccProbe(已安装的JRE是32位)都是32位。因为Adobe Reader是32位的,所以我认为这就是仅32位应用程序受到影响的原因。我还可以使用32位版本的Ranorex Spy重现此行为。
现在,我知道该行为不是由错误的实现引起的。但是为什么要对这个Adobe Reader Accessibility.api文件进行如此多的访问的问题仍然悬而未决...