Как сфокусироваться на окне Electron, когда оно открывается после фокусировки на другой программе - PullRequest
1 голос
/ 19 февраля 2020

Я создаю приложение Electron, которое должно отображаться при нажатии глобальной клавиши быстрого доступа. Для сочетания клавиш я использую iohook, и эта часть работает хорошо. Если я разрешу, чтобы окно отображалось как обычно во время запуска приложения, Windows фокусируется на нем (мой тест нажимает alt, чтобы увидеть, какая строка меню активирована).

Проблема заключается в том, что если я запускаю программа с visible: false или еще не генерирует Electron.BrowserWindow, а затем вызывает win.show() или создает окно, когда я нажимаю сочетание клавиш, оно открывает окно на переднем плане, но фокус все еще на приложении, которое я был включен до нажатия на ярлык.

В прошлом я исправил это с помощью Autohotkey, но я хочу сделать это приложение перекрестным и желательно содержать как можно больше кода в NodeJS.

1 Ответ

1 голос
/ 20 февраля 2020

Оказывается, есть задержка в ОС, прежде чем окно может быть сфокусировано. Вызов focus() сразу после show() ничего не делает (или может в некоторых случаях выиграть условия гонки). Использование события show для активации фокуса решает эту проблему.

win.on('show', () => { win.focus(); });
win.show();

РЕДАКТИРОВАТЬ: на уровне ОС все еще существует состояние гонки, которое иногда приводит к тому, что окно не фокусируется, поэтому мне все равно придется добавить время ожидания:

win.on('show', () => {
  setTimeout(() => {
    win.focus();
  }, 200);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...