electron 如何获取有关其他正在运行或处于焦点的应用程序的信息?

x6492ojm  于 2022-12-16  发布在  Electron
关注(0)|答案(4)|浏览(673)

我的动机:我正在写一个应用程序来帮助一些量化的自我/时间跟踪类型的事情。我想使用电子记录有关我目前正在使用的应用程序的信息。
有没有办法获取Electron中其他应用程序的信息?你能不能至少拉取当前有焦点的另一个应用程序的信息?例如,如果用户正在Chrome浏览网页,那么知道A)他们正在使用Chrome,B)他们正在查看的网页的标题就太好了。
在我的研究过程中,我发现了这个问题:Which app has the focus when a global shortcut is triggered
看起来作者正在使用nodObjc库在OSX上获取这些信息。除了其他人正在使用的解决这个问题的方法外,我特别好奇电子本身是否有任何方法可以在不求助于外部库的情况下暴露这些信息。

vlf7wbxs

vlf7wbxs1#

在有限的情况下,可以使用电子的desktopCapturer.getSources()方法获得其中的一些信息。
这不会让机器上的所有程序都运行,只会让chromium认为是视频捕获源的程序运行,这通常等同于任何有GUI窗口(例如,在windows的任务栏上)的活动程序。

desktopCapturer.getSources({
  types: ['window', 'screen']
}, (error, sources) => {
  if (error) throw error
  for (let i = 0; i < sources.length; ++i) {
    log(sources[i]);
  }
});
9cbw7uwe

9cbw7uwe2#

不,Electron不提供获取其他应用程序信息的API。您需要直接访问原生平台API来获取这些信息。例如Tockler似乎通过shell脚本来实现,但我个人更喜欢直接通过原生节点插件/模块或node-ffi-napi访问原生API。

qgzx9mmu

qgzx9mmu3#

2022年答案

Andy Baird's answer无疑是更好的原生Electron方法,尽管语法已经过时或不完整。以下是一个完整的工作代码片段,假设在最新的Electron版本(13+)中使用远程模块从渲染器运行:

require('@electron/remote').desktopCapturer.getSources({
  types: ['window', 'screen']
}).then(sources => {
  for (const thisSource of sources) {
    console.log(thisSource.name);
  }
});
93ze6v8z

93ze6v8z4#

这里的其他答案适用于渲染端-在主进程中执行此操作可能会有所帮助:

const { desktopCapturer } = require('electron')

desktopCapturer.getSources({ types: ['window', 'screen'] }).then(async sources => {
  for (const source of sources) {
    console.log("Window: ", source.id, source.name);
  }
})

相关问题