单击按钮从 NWJS 应用程序中启动单独的 NWJS 应用程序
Launching separate NWJS App from within a NWJS app onclick of a button
我正在开发软件的启动器应用程序。无法通过单击我的 NWJS 应用程序中的按钮来弄清楚如何启动另一个应用程序。我以前在 HTA 上做过这件事以启动我的视频游戏,但无法在这里找到答案。在 hta 上,我必须在单击时生成一个 bat 文件,然后是 bat 脚本 运行 程序。
我制作的按钮:
<span name="SystemWrapper3" id="SystemWrapper3" class="SystemWrapper3">
<input type="button" value="Calculator" name="SystemInput3" id="SystemInput3" class="SystemInput3" />
<i class="fa-solid fa-square-root-variable fa-lg" id="SystemIcon4"></i>
</span>
我一直在研究它我对此还是很陌生。我已经尝试了几种解决方案,我发现这些解决方案是在网上查找的,但它们都没有用。 idk 如果它是版本不兼容还是什么?我正在使用 NWJS 0.64.1 Win64 它可能会或可能不会成为我正在启动的 NWJS 应用程序,它可能只是一个普通的 exe。我不确定两者是否有不同的要求。
编辑::::
我找到了这个,但我不确定如何在单击我的按钮时调用此代码?也许让它成为一个功能?然后用onclick="myfunc()"?
调用函数名
var exec = require('child_process').execFile;
exec('C:/asd/test.exe', function(err, data) {
console.log(err)
console.log(data.toString());
});
编辑 2::::
所以我尝试了这个和几个变体,但仍然没有运气。我用 onclick="launchbat()" 从我的按钮调用它。
<script type="text/javascript">
function launchbat() {
var exec = require('child_process').execFile;
exec('"C:\Users\Dustin Angeletti\OneDrive\Documents\bat.bat"', function(err, data) {
console.log(err)
console.log(data.toString());
});
}
</script>
这应该有效。虽然取决于你想要什么,你可能想使用 require('child_process').spawn
而不是 require('child_process').exec
.
Vanilla JS:您需要设置每个按钮(重复)并更新数组。
<button id="calculator">
<i class="fa-solid fa-square-root-variable fa-lg"></i>
Open Calculator
</button>
<button id="photoshop">
<i class="fa-solid fa-aperture fa-lg"></i>
Open Adobe Photoshop
</button>
<script>
const exec = require('child_process').exec;
const path = require('path');
const appMap = [
{
buttonId: 'calculator',
executable: 'calc.exe'
},
{
buttonId: 'photoshop',
executable: path.join('C:', 'Program Files (x86)', 'Adobe', 'Photoshop', 'photoshop.exe')
}
];
function executionCallback (err, stdout, stderr) {
if (err) {
console.log({ err });
}
if (stdout) {
console.log({ stdout });
}
if (stderr) {
console.log({ stderr });
}
}
appMap.forEach(function (app) {
const button = document.getElementById(app.buttonId)
button.addEventListener('click', function () {
exec(app.executable, {}, executionCallback);
});
});
</script>
Vue.js: 你可以改用 Vue,这里你只需要更新数组,Vue 会处理其他所有事情。
<div id="app">
<button v-for="app in apps" @click="run(app.executable)">
<i class="fa-solid fa-lg" :class="app.icon"></i>
{{ app.label }}
</button>
</div>
<script src="https://unpkg.com/vue@3.2.36/dist/vue.global.prod.js"></script>
<script>
const exec = window.nw.require('child_process').exec;
const path = window.nw.require('path');
const app = Vue.createApp({
data: function () {
return {
apps: [
{
icon: 'fa-square-root-variable',
label: 'Open Calculator',
executable: 'calc.exe'
},
{
icon: 'fa-aperture',
label: 'Open Adobe Photoshop',
executable: path.join('C:', 'Program Files (x86)', 'Adobe', 'Photoshop', 'photoshop.exe')
}
]
}
},
methods: {
run: function (appExecutable) {
const options = {};
exec(appExecutable, options, function (err, stdout, stderr) {
if (err) {
console.log({ err });
}
if (stdout) {
console.log({ stdout });
}
if (stderr) {
console.log({ stderr });
}
});
}
}
}).mount('#app');
</script>
想通了。很简单,我的第一种方法和第二种方法都很好。我一直以来的问题是在真实文件路径中使用反斜杠。您必须使用正斜杠。很奇怪。这适用于相对和绝对路径。
function AppLaunch7() {
const path = require('path');
nw.Shell.openItem(path.resolve('D:/SECURE DRIVE/SYSTEM CORE/SECURE CALC/SECURE CALC.exe'));
}
<div name="SystemWrapper1" id="SystemWrapper1" class="SystemWrapper1" onclick="AppLaunch7()">
<input type="button" value="Documents" name="SystemInput1" id="SystemInput1" class="SystemInput1" />
<span name="SystemIcon1" id="SystemIcon1" class="material-icons">description</span>
</div>
我正在开发软件的启动器应用程序。无法通过单击我的 NWJS 应用程序中的按钮来弄清楚如何启动另一个应用程序。我以前在 HTA 上做过这件事以启动我的视频游戏,但无法在这里找到答案。在 hta 上,我必须在单击时生成一个 bat 文件,然后是 bat 脚本 运行 程序。
我制作的按钮:
<span name="SystemWrapper3" id="SystemWrapper3" class="SystemWrapper3">
<input type="button" value="Calculator" name="SystemInput3" id="SystemInput3" class="SystemInput3" />
<i class="fa-solid fa-square-root-variable fa-lg" id="SystemIcon4"></i>
</span>
我一直在研究它我对此还是很陌生。我已经尝试了几种解决方案,我发现这些解决方案是在网上查找的,但它们都没有用。 idk 如果它是版本不兼容还是什么?我正在使用 NWJS 0.64.1 Win64 它可能会或可能不会成为我正在启动的 NWJS 应用程序,它可能只是一个普通的 exe。我不确定两者是否有不同的要求。
编辑::::
我找到了这个,但我不确定如何在单击我的按钮时调用此代码?也许让它成为一个功能?然后用onclick="myfunc()"?
调用函数名var exec = require('child_process').execFile;
exec('C:/asd/test.exe', function(err, data) {
console.log(err)
console.log(data.toString());
});
编辑 2::::
所以我尝试了这个和几个变体,但仍然没有运气。我用 onclick="launchbat()" 从我的按钮调用它。
<script type="text/javascript">
function launchbat() {
var exec = require('child_process').execFile;
exec('"C:\Users\Dustin Angeletti\OneDrive\Documents\bat.bat"', function(err, data) {
console.log(err)
console.log(data.toString());
});
}
</script>
这应该有效。虽然取决于你想要什么,你可能想使用 require('child_process').spawn
而不是 require('child_process').exec
.
Vanilla JS:您需要设置每个按钮(重复)并更新数组。
<button id="calculator">
<i class="fa-solid fa-square-root-variable fa-lg"></i>
Open Calculator
</button>
<button id="photoshop">
<i class="fa-solid fa-aperture fa-lg"></i>
Open Adobe Photoshop
</button>
<script>
const exec = require('child_process').exec;
const path = require('path');
const appMap = [
{
buttonId: 'calculator',
executable: 'calc.exe'
},
{
buttonId: 'photoshop',
executable: path.join('C:', 'Program Files (x86)', 'Adobe', 'Photoshop', 'photoshop.exe')
}
];
function executionCallback (err, stdout, stderr) {
if (err) {
console.log({ err });
}
if (stdout) {
console.log({ stdout });
}
if (stderr) {
console.log({ stderr });
}
}
appMap.forEach(function (app) {
const button = document.getElementById(app.buttonId)
button.addEventListener('click', function () {
exec(app.executable, {}, executionCallback);
});
});
</script>
Vue.js: 你可以改用 Vue,这里你只需要更新数组,Vue 会处理其他所有事情。
<div id="app">
<button v-for="app in apps" @click="run(app.executable)">
<i class="fa-solid fa-lg" :class="app.icon"></i>
{{ app.label }}
</button>
</div>
<script src="https://unpkg.com/vue@3.2.36/dist/vue.global.prod.js"></script>
<script>
const exec = window.nw.require('child_process').exec;
const path = window.nw.require('path');
const app = Vue.createApp({
data: function () {
return {
apps: [
{
icon: 'fa-square-root-variable',
label: 'Open Calculator',
executable: 'calc.exe'
},
{
icon: 'fa-aperture',
label: 'Open Adobe Photoshop',
executable: path.join('C:', 'Program Files (x86)', 'Adobe', 'Photoshop', 'photoshop.exe')
}
]
}
},
methods: {
run: function (appExecutable) {
const options = {};
exec(appExecutable, options, function (err, stdout, stderr) {
if (err) {
console.log({ err });
}
if (stdout) {
console.log({ stdout });
}
if (stderr) {
console.log({ stderr });
}
});
}
}
}).mount('#app');
</script>
想通了。很简单,我的第一种方法和第二种方法都很好。我一直以来的问题是在真实文件路径中使用反斜杠。您必须使用正斜杠。很奇怪。这适用于相对和绝对路径。
function AppLaunch7() {
const path = require('path');
nw.Shell.openItem(path.resolve('D:/SECURE DRIVE/SYSTEM CORE/SECURE CALC/SECURE CALC.exe'));
}
<div name="SystemWrapper1" id="SystemWrapper1" class="SystemWrapper1" onclick="AppLaunch7()">
<input type="button" value="Documents" name="SystemInput1" id="SystemInput1" class="SystemInput1" />
<span name="SystemIcon1" id="SystemIcon1" class="material-icons">description</span>
</div>