¿Cómo iniciar una aplicación desde HTA?
preguntar:
¡Hola, experto en guiones! Para HTA, ¿hay algo que pueda reemplazar el comando wscript.shell? Necesito ejecutar alguna aplicación y especificar el archivo para abrir.
- DL
respuesta:
Hola dl. Sí, sabemos que tales comandos se pueden usar en HTA y se pueden usar en lugar del comando wscript.shell, y lo presentaremos en un tiempo. Sin embargo, antes de presentarlo, debemos tener en cuenta que realmente puede usar el objeto WScript.Shell en HTA. Esta es una confusión común: debido a que no puede usar ciertos comandos en el HTA (como wscript.echo y wscript.sleep), la gente piensa que no puede usar ningún comando WSH en el HTA.
Antes de continuar, hay otra pregunta: ¿por qué no puede usar wscript.echo y wscript.sleep en HTA? Es decir, estos métodos son propiedades de los objetos WScript, y no puede crear instancias de objetos WScript. Los objetos WScript se crean automáticamente y solo se crean cuando ejecuta Windows Script Host (es decir, wscript.exe o cscript.exe). Es precisamente por esto que los siguientes scripts son absolutamente válidos:
El código es el siguiente:
Wscript.echo "hey".
Tenga en cuenta que no creamos un objeto WScript, que se creó automáticamente cuando llamamos a Windows Script Host.
Pero esto se limita a los objetos WScript. Hay otros objetos WSH que puede crear, incluidos los objetos de shell. Por ejemplo, aquí hay un pequeño HTA simple que crea un objeto wscript.shell y luego ejecuta notepad.exe (y abre el archivo c: /scripts/test.txt en el proceso)::
El código es el siguiente:
<html>
<Evista>
<script language = "VBScript">
Programa subterráneo
Establecer objshell = createObject ("wscript.shell")
objshell.run "notepad.exe c: /scripts/test.txt"
Final
</script>
</ablo>
<Body>
<Button onClick = "runprogram"> Ejecutar programa </boton> <p>
</body>
</html>
Como puede ver, este es casi el HTA más fácil que puede obtener: consta de solo un botón y se ejecuta una subrutina llamada RunProgram cuando se hace clic. Eche un vistazo al código RunProgram:
El código es el siguiente:
Programa subterráneo
Establecer objshell = createObject ("wscript.shell")
objshell.run "notepad.exe c: /scripts/test.txt"
Final
Eso es todo: creamos una instancia del objeto wscript.shell y llamamos al método Ejecutar. Esto pasa un solo parámetro para la ejecución: el nombre del archivo ejecutable (notepad.exe) seguido de la ruta del archivo que desea abrir. Eso es todo lo que tenemos que hacer.
Por cierto, mientras el guión se ejecute en la HTA, no habrá problemas. Si intenta ejecutarlo en un archivo HTML (es decir, un archivo con la extensión del archivo .htm), aparece un cuadro de mensaje que le advierte que un control ActiveX está tratando de ejecutar en la página. Debe hacer clic en Sí para permitir que la subrutina cree un objeto de shell y luego lo ejecute. Esto se debe a que los objetos WSH se consideran "inseguridad para las secuencias de comandos".
Nota: Sí, esto suena un poco extraño, y en realidad creo que los objetos de secuencias de comandos no son seguros para las secuencias de comandos. Pero esto se debe a que Internet Explorer utiliza diferentes script alojamiento y diferentes modelos de seguridad que WSH. Afortunadamente, HTA utiliza un modelo de seguridad diferente al Internet Explorer, lo que significa que no encuentra este problema al crear objetos de shell dentro de la HTA.