На самом деле вам не нужен HTA для отображения MsgBox без прерывания выполнения кода. Более того, передача текста или содержимого файла в параметре командной строки прерывает символы новой строки.
В следующем примере VBScript запускается в другом процессе wscript.exe для отображения MsgBox
, передавая текст сообщения через переменную среды процесса:
Option Explicit
' Check if the process launched for message output
ChkMsg
' Main code begins here
' ...
ShowMsg "Message doesn't interrupt code execution"
ShowMsg ReadTextFile("C:\List.txt", 0)
ShowMsg "Another one message"
' ...
Sub ShowMsg(sText)
If sText = "" Then Exit Sub
With CreateObject("WScript.Shell")
.Environment("process").Item("msg") = sText
.Run """" & WScript.FullName & """ """ & WScript.ScriptFullName & """", , False
.Environment("process").Item("msg") = ""
End With
End Sub
Sub ChkMsg()
Dim sText
sText = CreateObject("WScript.Shell").Environment("process").Item("msg")
If sText = "" Then Exit Sub
MsgBox sText
WScript.Quit
End Sub
Function ReadTextFile(sPath, lFormat)
' lFormat -2 - System default, -1 - Unicode, 0 - ASCII
With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 1, False, lFormat)
ReadTextFile = ""
If Not .AtEndOfStream Then ReadTextFile = .ReadAll
.Close
End With
End Function
MsgBox
может отображать не более 1023 символов, если вам нужно больше, вы можете просто открыть содержимое текстового файла с помощью стандартного Блокнота:
sPath = "C:\List.txt"
CreateObject("WScript.Shell").Run "notepad.exe " & sPath, 0, True
Кстати, вы, наконец, можете прибегнуть к динамически создаваемому HTA, если вам нужен более сложный графический интерфейс, как в в примерах .