Skip to content

在 Electron 中使用 PowerShell 打开 Windows 的"打开方式"对话框

如果你的文件路径是 "E:\electron-ycb\public\logo.png",那么在 PowerShell 中打开 "打开方式" 对话框的命令应该是这样的:

powershell
Start-Process rundll32.exe -ArgumentList "shell32.dll,OpenAs_RunDLL E:\electron-ycb\public\logo.png"

如果你想在 Node.js 代码中执行这个命令,可以这样写:

javascript
const { exec } = require("child_process");

function openWithDialog(filePath) {
  exec(
    `powershell Start-Process rundll32.exe -ArgumentList 'shell32.dll,OpenAs_RunDLL "${filePath}"'`,
    (error, stdout, stderr) => {
      if (error) {
        console.error(`执行错误: ${error}`);
        return;
      }
      if (stderr) {
        console.error(`标准错误输出: ${stderr}`);
        return;
      }
      console.log(`标准输出: ${stdout}`);
    }
  );
}

openWithDialog("E:\\electron-ycb\\public\\logo.png");

注意在 JavaScript 字符串中,我们需要用两个反斜杠 \\ 来表示一个反斜杠 \,因为在 JavaScript 字符串中,反斜杠是一个转义字符,所以要写成 \\

如果是 mac openWithDialog 方法又该如何写

在 macOS 上,你可以使用 open 命令并使用 -a 选项来打开文件。不过,macOS 没有内置的命令或选项来显示“打开方式”的对话框。为了达到类似的效果,你可以直接调用 open 命令不带 -a 选项,系统将会使用用户默认的应用程序来打开文件。

如果你希望用户能够选择应用程序来打开文件,你可能需要编写自定义的对话框,列出 /Applications 目录下的应用程序,让用户从中选择。但这将会复杂很多,并且无法获得和系统自带的“打开方式”对话框完全一样的效果。

以下是一个基础的 openWithDialog 函数实现,它只是使用默认的应用程序打开文件:

javascript
const { exec } = require("child_process");

function openWithDialog(filePath) {
  exec(`open "${filePath}"`, (error, stdout, stderr) => {
    if (error) {
      console.error(`执行错误: ${error}`);
      return;
    }
    if (stderr) {
      console.error(`标准错误输出: ${stderr}`);
      return;
    }
    console.log(`标准输出: ${stdout}`);
  });
}

openWithDialog("/path/to/your/file.txt");

在上述代码中,open 命令被用来打开文件,文件路径被包裹在双引号中以防止路径中可能存在的空格或特殊字符导致问题。

注意:macOS 系统中,与 Windows 系统不同,路径分隔符为正斜杠(/),而不是反斜杠(\)。