【问题标题】:Set icon for Task in Jump List (Windows)在跳转列表中设置任务图标 (Windows)
【发布时间】:2019-04-17 19:20:44
【问题描述】:

我正在尝试在Jump List 的“任务”部分为我的 Electron 应用程序设置一个图标。我已经成功在任务栏中设置了一个图标。但我也想在跳转列表的任务部分设置我的图标。我怎样才能做到这一点?

我已经尝试使用app.setUserTask() 方法并尝试在我的 JSON 文件中设置一个图标。任务栏中的图标及其自身的图标正在工作。我也尝试使用 .ico 和 .png。

描述和标题都有效,所以我猜我在路径或类似的东西上做错了。 ico 和 png 图像与我的 main.js(用于 Electron)位于同一目录中。

app.setUserTasks([
    {
      program: process.execPath,
      arguments: '--new-window',
      iconPath: path.join(__dirname,"icon.ico").execPath,
      iconIndex: 1,
      title: 'myApp',
      description: 'myApp'
    }
  ])

【问题讨论】:

  • 看起来你在iconPath中混淆了两个东西:每个electronjs.org/docs/api/structures/task,你可以使用iconPath: process.execPath来显示应用程序图标或使用绝对路径:iconPath: path.join(__dirname,"icon.ico")(没有@ 987654328@).

标签: icons electron jump-list


【解决方案1】:

首先,您在iconPath 中似乎混淆了两件事。根据Electron docs,您可以使用process.execPath 来引用应用程序可执行文件或使用任何其他绝对路径。由于path.join 返回一个字符串,它不会有execPath 属性。其次,我把iconIndex改成了0。

在 Windows 7 和 Electron 4.1.4 上测试了以下内容:

PNG 文件似乎根本不起作用——您需要将 ICO 文件用于跳转列表。此外,图标不能取自asar。这意味着您需要直接在文件系统中进行 ICO,并且需要提供它的绝对路径。

完整的代码示例:

const {app, BrowserWindow} = require('electron')
const path = require('path')
const os = require('os')

let my_path

my_path = "C:\\icon.png"                                // doesn't work
my_path = "C:\\icon.ico"                                // works
my_path = process.execPath                              // works (uses application icon)
my_path = path.join(__dirname, "icon.png")              // doesn't work, translates to C:\path\to\app\resources\app.asar\icon.png
my_path = path.join(__dirname, "icon.ico")              // doesn't work, translates to C:\path\to\app\resources\app.asar\icon.ico
my_path = path.join(app.getAppPath(), "icon.ico")       // doesn't work, translates to C:\path\to\app\resources\app.asar\icon.ico
my_path = path.join(__dirname, "..", "..", "icon.ico")  // works if icon.ico is in the same directory
                                                        // as the exe "packaged" by electron-packager, assuming icon.ico is copied in


if (os.platform() == "win32") {
    app.setUserTasks([{
        program: process.execPath,
        arguments: '--new-window',
        iconPath: my_path,
        iconIndex: 0,
        title: 'My App',
        description: 'Description of myApp'
    }])
}

let mainWindow

app.on('ready', () => {
    mainWindow = new BrowserWindow()

    mainWindow.on('closed', () => {
        mainWindow = null
        app.quit()
    })
})

这里,doesn't work 表示 Windows 显示默认图标。我确保icon.pngicon.icoapp.asar 中。

【讨论】:

    【解决方案2】:

    我让它工作了。任务管理器、任务栏和应用程序中的图标已更改 我用过这个topic

    我确保 .exe 和我的 img 在同一个文件夹中。除了 .exe 本身之外,我的所有图标现在都已更改。

    【讨论】:

    • 您不能编辑您对此问题的第一个答案以使其更完整吗?理想情况下,会有一个完全解决原始问题的答案。此外,如果您添加了您最终使用的代码,将会有很大帮助。
    猜你喜欢
    • 2012-09-08
    • 2012-12-23
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多