HTAからアプリケーションを開始する方法は?
聞く:
こんにちは、スクリプトの専門家! HTAの場合、wscript.shellコマンドを置き換えることができるものはありますか?いくつかのアプリケーションを実行し、開くファイルを指定する必要があります。
-DL
答え:
こんにちはdl。はい、そのようなコマンドはHTAで使用でき、wscript.shellコマンドの代わりに使用できることを知っています。しばらくすると紹介します。ただし、導入する前に、HTAでwscript.shellオブジェクトを実際に使用できることに注意する必要があります。これはよくある混乱です。HTAで特定のコマンドを使用できないため(WScript.echoやwscript.sleepなど)、HTAでWSHコマンドを使用できないと考えています。
続行する前に、別の質問があります。なぜwscript.echoとwscript.sleepを使用できないのですか?つまり、これらのメソッドはWScriptオブジェクトのプロパティであり、WScriptオブジェクトのインスタンスを作成できません。 WScriptオブジェクトは自動的に作成され、Windowsスクリプトホスト(つまりwscript.exeまたはcscript.exe)を実行するときにのみ作成されます。このため、次のスクリプトが絶対に有効であることがあります。
コードは次のとおりです。
wscript.echo "Hey。"
WSCRIPTオブジェクトは作成されなかったことに注意してください。WScriptオブジェクトは、Windowsスクリプトホストを呼び出すときに自動的に作成されたことに注意してください。
しかし、これはWScriptオブジェクトに限定されています。シェルオブジェクトなど、作成できる他のWSHオブジェクトがあります。たとえば、ここにwscript.shellオブジェクトを作成してからnotepad.exeを実行します(およびプロセスでc:/scripts/test.txtを開きます)。
コードは次のとおりです。
<html>
<head>
<スクリプト言語= "vbscript">
サブランプログラム
set objshell = createObject( "wscript.shell")
objshell.run "motepad.exe C:/scripts/test.txt"
End Sub
</script>
</head>
<body>
<button onclick = "runprogram">プログラムを実行</button> <p>
</body>
</html>
ご覧のとおり、これはほぼ最も簡単なHTAです。1つのボタンのみで構成され、クリック時にランプログラムと呼ばれるサブルーチンが実行されます。 Runprogramコードをご覧ください。
コードは次のとおりです。
サブランプログラム
set objshell = createObject( "wscript.shell")
objshell.run "motepad.exe C:/scripts/test.txt"
End Sub
それだけです。wscript.shellオブジェクトのインスタンスを作成し、実行方法を呼び出します。これにより、実行用の単一のパラメーター:実行可能ファイル名(notepad.exe)に続いて、開くファイルのパスが続きます。それが私たちがする必要があるすべてです。
ちなみに、スクリプトがHTAで実行されている限り、問題はありません。 HTMLファイル(つまり、ファイル拡張子.htmのファイル)で実行しようとすると、メッセージボックスが表示され、ActiveXコントロールがページで実行されようとしていることを警告します。 [はい]をクリックして、サブルーチンがシェルオブジェクトを作成してから実行する必要があります。これは、WSHオブジェクトが「スクリプトの不安」と見なされるためです。
注:はい、これは少し奇妙に聞こえます。実際、スクリプトオブジェクトはスクリプトに安全ではないと思います。しかし、これは、Internet ExplorerがWSHとは異なるスクリプトホスティングと異なるセキュリティモデルを使用しているためです。幸いなことに、HTAはInternet Explorerとは異なるセキュリティモデルを使用しています。つまり、HTA内でシェルオブジェクトを作成する際にこの問題に遭遇しません。