Как определить приложение на переднем плане в Chrome OS?
Я пытаюсь создать расширение (или приложение) Chrome для ОС Chrome, которое отслеживает приложение переднего плана, с которым в данный момент взаимодействует пользователь.
Например, если пользователь:
- играет Angry Birds несколько минут; затем
- просматривает некоторые веб-страницы с помощью Chrome и, наконец,
- делает некоторые расчеты с помощью калькулятора
затем я хочу, чтобы мое расширение (или приложение) могло обнаруживать и реагировать на эти три перехода по мере их возникновения. В идеале информация о приложении, которую я хотел бы получить, - это либо имя приложения (например, "Angry Birds"), и / или идентификатор приложения (например, com.somecompany.someapp).
Я уже экспериментировал с несколькими API-интерфейсами Chrome. *, Но пока мне не повезло:
chrome.windows
а такжеchrome.tabs
может только перечислять окна / вкладки браузера (не те из приложений).chrome.app.window
может перечислять только те окна, которые являются частью его собственного приложения (но не других приложений).- Приложения отправляются только свои
chrome.app.runtime
события жизненного цикла, а не события других приложений. - Я мог бы использовать OCR на экране, предоставленном
chrome.desktopCapture
но мне, вероятно, придется написать конкретный код для каждого приложения, которое я хочу поддерживать, и это будет очень загружать процессор.
Мне повезло, что я выполнял аналогичную работу на других платформах (Windows, Mac, Linux и даже Android), используя клиентские API для специальных возможностей (те же API, которые используются программами чтения с экрана для людей с ограниченными возможностями). К сожалению, Chrome OS не поддерживает сторонних клиентов.
2 ответа
Есть запрос на добавление дополнительных типов окон к результатам chrome.windows.getAll() - см. Http://crbug.com/394341
Расширения Chrome и API приложений перечислены здесь: Расширения, Приложения.
(Не) к счастью, там нет ничего, что позволило бы шпионить за пользовательской активностью вне вашего контекста. Приложения обычно ограничиваются тем, что в них происходит (плюс некоторые аппаратные уведомления), а расширения, как правило, ограничиваются тем, что происходит в браузере.
Вы можете обнаружить потерю фокуса в браузере / приложении, но вы не можете сказать, куда направился фокус.
Например, chrome.windows.onFocusChanged
о событии продления -1
для всех окон, которые не являются частью браузера, даже если это приложение Chrome.