📅  最后修改于: 2023-12-03 15:25:32.707000             🧑  作者: Mango
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前,请务必留意以下几点: