Использование API специальных возможностей для определения размера и происхождения окна браузера в плагине NPAPI

Я делаю плагин для браузеров (Safari, Chrome, Firefox) в MacOSX.

Что я пытаюсь сделать, так это использовать 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 равно kAXErrorCannotComplete в AXError.h

Но я не знаю, почему.

Любые комментарии будут приветствоваться.

Заранее спасибо.


person neochoon    schedule 24.11.2010    source источник
comment
Зачем вам происхождение и размер окна браузера, что вы хотите с ними делать?   -  person Yuji    schedule 25.11.2010
comment
Я хочу закрыть браузер своим окном, в котором есть мой плагин. Таким образом, пользователь не может распознать, что есть два окна.   -  person neochoon    schedule 29.11.2010
comment
Я думаю, что это очень хрупкий метод. Если вам нужно создать изображения в другом процессе (а вы?), почему бы не использовать, например. общая память для обмена данными с плагином?   -  person Georg Fritzsche    schedule 29.11.2010
comment
К вашему сведению, новый Java Plugin2 от Apple использовал этот метод во время его ранней разработки, и он оказался настолько проблематичным, что в конце концов от него отказались. Сохранение вашего окна на правильном уровне относительно нескольких окон браузера, например, будет проблематичным. Когда я предлагал использовать отдельное окно в качестве краткосрочного решения, я имел в виду окно, которое пользователь может видеть и с которым может взаимодействовать.   -  person smorgan    schedule 29.11.2010


Ответы (1)


Учитывая ваш другой вопрос на этом сайте, я предполагаю, что вы на самом деле пытаетесь выяснить, где находится плагин на экране. Все, что вам нужно для этого, это использовать NPN_ConvertPoint, чтобы найти, где находится плагин (0,0) в координатах экрана. Это будет намного проще и гораздо менее хрупко, чем попытка использовать доступность (и на самом деле даст вам правильный ответ; при доступности вам придется делать предположения о высоте панели инструментов окна, которая является переменной).

person smorgan    schedule 28.11.2010
comment
Большое спасибо! Я пробовал API CGWindowListCopyWindowInfo, но NPN_ConvertPoint — это именно то, что я пытаюсь найти. Я очень ценю это. - person neochoon; 29.11.2010