如何确定电子应用程序是否处于前台?

时间:2019-04-02 12:00:16

标签: electron

我有一个要求,我只想在电子应用程序处于前台时才在其中执行操作。

它是电子反应的应用。在安装组件时,我想安排一个定期任务,该任务仅在应用程序处于焦点或被用户使用时运行。并在应用程序进入后台时暂停任务。

我们如何检测电子应用程序处于前台?

2 个答案:

答案 0 :(得分:1)

您可以在BrowserWindow上使用focus / blur事件,以在应用程序集中/不集中时得到通知。

mainWindow = new BrowserWindow({})

mainWindow.on('focus', () => {
    console.log('window got focus')
})

mainWindow.on('blur', () => {
    console.log('window blur')
})

您可能想在这些事件处理程序中更新组件的状态,或使用任何其他方法来跟踪当前的焦点状态。

这假设您有一个应用程序窗口。如果有多个,则需要将检查范围扩大到所有窗口。

答案 1 :(得分:0)

您可以使用isFocused method from BrowserWindow。要获得自己的BrowserWindow,可以执行以下操作:

        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var request = bindingContext.HttpContext.Request;

            using (var reader = new StreamReader(request.Body, Encoding.UTF8))
            {
                var bodyString = reader.ReadToEnd();
                var person = bodyString.DeSerialize<Person>(); //this is custom logic to de-serialize to object from JSON string

                //write your model binding logic here...

                bindingContext.Result = ModelBindingResult.Success(person);
            }

            return Task.CompletedTask;
        }

这将返回您所有应用程序的窗口。因此,要获得第一个/主窗口,您可以像这样解构数组:

remote.BrowserWindow.getAllWindows();