📜  应用程序脚本 openbyName - Javascript (1)

📅  最后修改于: 2023-12-03 15:25:32.707000             🧑  作者: Mango

应用程序脚本 openbyName - Javascript

简介

openbyName是一个Javascript应用程序脚本,可以根据指定的名称打开应用程序。该脚本使用了Windows Script Host的WshShell对象作为接口,既适用于Windows操作系统下的应用程序,也适用于常见的办公软件如Office、Adobe Reader等。

使用方法

在调用openbyName之前,需要在Javascript代码中创建一个WshShell对象,并将其作为openbyName的参数之一,如下所示:

var shell = new ActiveXObject("WScript.Shell");
var appName = "notepad.exe";
openbyName(shell, appName);

其中,appName是要打开的应用程序的名称,可以是完整的可执行程序文件名,也可以是带有扩展名的简写名称。

在openbyName内部,会调用Windows Script Host的WshShell对象的Run方法,将应用程序打开,并返回打开程序的进程ID。如果应用程序打开失败,则会抛出异常。

程序代码

下面是openbyName的程序代码,你可以将其直接复制到你的Javascript代码中,并进行调用。

function openbyName(shell, appName)
{
    var pid = null;
    var cmd = null;
  
    try
    {
        // 构造打开应用程序的命令
        cmd = shell.exec("cmd /C \"echo off && for /f %x in ('tasklist /FI \"IMAGENAME eq " + appName + "\" /NH /FO CSV /FI \"STATUS eq running\"') do @echo %~x && exit\"");
        cmd.StdOut.ReadLine();
        pid = parseInt(cmd.StdOut.ReadLine());

        if(pid)
        {
            // 进程ID有效,则直接切换到该程序
            shell.AppActivate(pid);
        }
        else
        {
            // 进程ID无效,则通过Shell对象打开应用程序
            shell.Run(appName, 1, false);
        }
    }
    catch(e)
    {
        throw new Error("openbyName failed: " + e.message);
    }

    return pid;
}
注意事项

openbyName只适用于Windows操作系统,并且需要在Internet Explorer或其它支持ActiveX技术的浏览器中运行。另外,由于openbyName需要调用Windows Script Host的接口,同时涉及到系统安全问题,所以在使用openbyName前,请务必留意以下几点:

  1. 不要将openbyName的参数appName作为外部传入的字符串,否则会存在代码注入的风险。建议使用类似白名单的方式,只允许执行特定的应用程序;
  2. openbyName不能应用于运行在安全模式下的浏览器,否则会被防火墙或杀毒软件拒绝。