Macos 使用辅助功能API查找NPAPI插件中浏览器窗口的大小和原点

Macos 使用辅助功能API查找NPAPI插件中浏览器窗口的大小和原点,macos,plugins,npapi,accessibility-api,Macos,Plugins,Npapi,Accessibility Api,我一直在为MacOSX中的浏览器(Safari、Chrome、firefox)制作插件 我试图做的是使用Accessibility API在我的NPAPI插件中找到浏览器窗口的大小和来源 在Chrome中,我可以得到我想要的东西,但在Safari中,我得到了一个错误代码-25204 AXUIElementRef app = AXUIElementCreateApplication( browserProcessID ); AXUIElementRef frontWindow = NULL;

我一直在为MacOSX中的浏览器(Safari、Chrome、firefox)制作插件

我试图做的是使用Accessibility API在我的NPAPI插件中找到浏览器窗口的大小和来源

在Chrome中,我可以得到我想要的东西,但在Safari中,我得到了一个错误代码
-25204

 AXUIElementRef app = AXUIElementCreateApplication( browserProcessID );

 AXUIElementRef frontWindow = NULL;
 AXError err = AXUIElementCopyAttributeValue(
                       app, kAXMainWindowAttribute, (CFTypeRef *)&frontWindow );

 if ( err != kAXErrorSuccess ) {
      NSLog(@"%d", err);
      return -1;
 }
-25204
在AXError.h中是kAXErrorCannotComplete

但我不知道为什么

欢迎提出任何意见


提前感谢。

鉴于您在本网站上的其他问题,我猜您实际上想要完成的是找出插件在屏幕上的位置。您只需使用NPN_ConvertPoint来查找插件(0,0)在屏幕坐标中的位置。这将比尝试使用可访问性容易得多,也不那么脆弱(实际上会给你正确的答案;有了可访问性,你必须对窗口工具栏的高度做出假设,这是可变的).

考虑到你在这个网站上的另一个问题,我猜你真正想做的是找出插件在屏幕上的位置。您只需使用NPN_ConvertPoint来查找插件(0,0)在屏幕坐标中的位置。这比尝试使用可访问性要容易得多,也不那么脆弱(实际上会给你正确的答案;有了可访问性,你必须对窗口工具栏的高度做出假设,这是可变的)。

为什么你需要浏览器窗口的原点和大小,你想用它们做什么?我想用我的带有插件的窗口覆盖浏览器。所以用户无法识别有两个窗口。我认为这是一个非常脆弱的方法。如果您需要在另一个过程中创建图像(是吗?),为什么不使用共享内存与插件交换数据?仅供参考,苹果公司的新Java Plugin2在其早期开发过程中使用了这种方法,结果证明问题重重,他们最终放弃了这种方法。例如,将您的窗口保持在相对于多个浏览器窗口的正确层是有问题的。当我建议使用一个单独的窗口作为短期解决方案时,我指的是一个用户可以看到并与之交互的窗口。为什么需要浏览器窗口的来源和大小,您想用它们做什么?我想用带有插件的窗口覆盖浏览器。所以用户无法识别有两个窗口。我认为这是一个非常脆弱的方法。如果您需要在另一个过程中创建图像(是吗?),为什么不使用共享内存与插件交换数据?仅供参考,苹果公司的新Java Plugin2在其早期开发过程中使用了这种方法,结果证明问题重重,他们最终放弃了这种方法。例如,将您的窗口保持在相对于多个浏览器窗口的正确层是有问题的。当我建议使用一个单独的窗口作为短期解决方案时,我指的是一个用户可以看到并与之交互的窗口。非常感谢!我尝试了CGWindowListCopyWindowInfo api,但NPN_ConvertPoint正是我试图找到的。我真的很感激。非常感谢!我尝试了CGWindowListCopyWindowInfo api,但NPN_ConvertPoint正是我试图找到的。我真的很感激。