จะเริ่มแอปพลิเคชันจาก HTA ได้อย่างไร?
ถาม:
สวัสดีผู้เชี่ยวชาญสคริปต์! สำหรับ HTA มีอะไรที่สามารถแทนที่คำสั่ง wscript.shell ได้หรือไม่? ฉันต้องเรียกใช้แอปพลิเคชันบางอย่างและระบุไฟล์เพื่อเปิด
- DL
คำตอบ:
สวัสดี DL ใช่เรารู้ว่าสามารถใช้คำสั่งดังกล่าวใน HTA และสามารถใช้แทนคำสั่ง wscript.shell และเราจะแนะนำคุณในขณะนี้ อย่างไรก็ตามก่อนที่จะแนะนำเราควรทราบว่าคุณสามารถใช้วัตถุ WScript.shell ใน HTA ได้จริง นี่เป็นความสับสนทั่วไป: เนื่องจากคุณไม่สามารถใช้คำสั่งบางอย่างใน HTA (เช่น wscript.echo และ wscript.sleep) ผู้คนคิดว่าคุณไม่สามารถใช้คำสั่ง WSH ใด ๆ ใน HTA
ก่อนที่จะดำเนินการต่อมีคำถามอื่น: ทำไมคุณไม่สามารถใช้ wscript.echo และ wscript.sleep ใน HTA ได้? นั่นคือวิธีการเหล่านี้เป็นคุณสมบัติของวัตถุ WScript และคุณไม่สามารถสร้างอินสแตนซ์ของวัตถุ WScript ได้ วัตถุ WScript ถูกสร้างขึ้นโดยอัตโนมัติและถูกสร้างขึ้นเฉพาะเมื่อคุณเรียกใช้โฮสต์สคริปต์ Windows (เช่น wscript.exe หรือ cscript.exe) มันเป็นเพราะสิ่งนี้สคริปต์ต่อไปนี้ถูกต้องอย่างแน่นอน:
รหัสมีดังนี้:
wscript.echo "เฮ้"
โปรดทราบว่าเราไม่ได้สร้างวัตถุ WScript ซึ่งถูกสร้างขึ้นโดยอัตโนมัติเมื่อเราเรียกโฮสต์สคริปต์ Windows
แต่สิ่งนี้ จำกัด เฉพาะวัตถุ WScript มีวัตถุ WSH อื่น ๆ ที่คุณสามารถสร้างได้รวมถึงวัตถุเชลล์ ตัวอย่างเช่นนี่คือ HTA เล็ก ๆ น้อย ๆ ที่สร้างวัตถุ wscript.shell จากนั้นเรียกใช้ notepad.exe (และเปิดไฟล์ c: /scripts/test.txt ในกระบวนการ):
รหัสมีดังนี้:
<html>
<head>
<ภาษาสคริปต์ = "vbscript">
โปรแกรมย่อย
ตั้งค่า objshell = createObject ("wscript.shell")
objshell.run "notepad.exe c: /scripts/test.txt"
สิ้นสุดย่อย
</script>
</head>
<body>
<ปุ่ม onclick = "runprogram"> รันโปรแกรม </ button> <p>
</body>
</html>
อย่างที่คุณเห็นนี่เป็น HTA ที่ง่ายที่สุดที่คุณจะได้รับ: ประกอบด้วยเพียงปุ่มเดียวและรูทีนย่อยที่เรียกว่า runprogram จะทำงานเมื่อคลิก โปรดดูที่รหัส runprogram:
รหัสมีดังนี้:
โปรแกรมย่อย
ตั้งค่า objshell = createObject ("wscript.shell")
objshell.run "notepad.exe c: /scripts/test.txt"
สิ้นสุดย่อย
นั่นคือ: เราสร้างอินสแตนซ์ของวัตถุ WScript.shell และเรียกใช้วิธีการเรียกใช้ สิ่งนี้ผ่านพารามิเตอร์เดียวสำหรับการรัน: ชื่อไฟล์ที่เรียกใช้งานได้ (notepad.exe) ตามด้วยเส้นทางของไฟล์ที่คุณต้องการเปิด นั่นคือทั้งหมดที่เราต้องทำ
โดยวิธีการตราบใดที่สคริปต์ทำงานใน HTA จะไม่มีปัญหา หากคุณพยายามเรียกใช้ในไฟล์ HTML (นั่นคือไฟล์ที่มีนามสกุลไฟล์. htm) กล่องข้อความจะปรากฏขึ้นเตือนคุณว่าตัวควบคุม ActiveX กำลังพยายามทำงานบนหน้า คุณต้องคลิกใช่เพื่ออนุญาตให้รูทีนย่อยสร้างวัตถุเชลล์แล้วเรียกใช้ นี่เป็นเพราะวัตถุ WSH ได้รับการพิจารณาว่า "ความไม่มั่นคงสำหรับการเขียนสคริปต์"
หมายเหตุ: ใช่มันฟังดูแปลก ๆ และฉันคิดว่าจริง ๆ แล้ววัตถุสคริปต์ไม่ปลอดภัยสำหรับการเขียนสคริปต์ แต่นี่เป็นเพราะ Internet Explorer ใช้สคริปต์โฮสติ้งที่แตกต่างกันและโมเดลความปลอดภัยที่แตกต่างจาก WSH โชคดีที่ HTA ใช้รูปแบบความปลอดภัยที่แตกต่างจาก Internet Explorer ซึ่งหมายความว่าคุณไม่พบปัญหานี้เมื่อสร้างวัตถุเชลล์ภายใน HTA