Показать всплывающее окно / окно сообщения из содержимого TXT-файла с помощью mshta - PullRequest
1 голос
/ 09 июля 2019

Поиск по mshta и нашел этот пример из Интернета, но я не уверен, как использовать его для чтения содержимого моего текстового файла, а затем показать msgbox из содержимого файла txt

https://gist.github.com/simply-coded/4d80ce729c6cef8a860d466e8871323c

и здесь

https://forums.hak5.org/topic/41985-inline-vbs-scripting/

Текстовый файл в C: \ List.txt содержится

08Jan2019 : TOTAL $22.00 
14Jan2019 : TOTAL $101.00 
15Jan2019 : TOTAL $5.00 
16Jan2019 : TOTAL $12.00 
17Jan2019 : TOTAL $1.00 

Как реализовать пример mshta из Github ниже дляпоказать сообщение, содержащее текст / строку из моего текстового файла?

Option Explicit
Dim wsh : Set wsh = CreateObject("Wscript.Shell")

'Message boxes that don't wait for a return to continue. No return values.
MsgBlank "tetttedghdhbcccc", "title"

'Functions for simple no wait message boxes without return values.
Function MsgBlank(m, t)
    wsh.Run "mshta.exe vbscript:Execute(MsgBox(""" & m _
        & """, vbOkOnly, """ & t & """)(window.close))"
End Function

Ответы [ 2 ]

0 голосов
/ 13 июля 2019

На самом деле вам не нужен 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, если вам нужен более сложный графический интерфейс, как в в примерах .

0 голосов
/ 10 июля 2019

Согласно тому, что вы сказали, это будет пример того, что вы ищете:

Option Explicit
Dim wsh : Set wsh = CreateObject("Wscript.Shell")

'Message boxes that don't wait for a return to continue. No return values.
Dim fso
Dim file
Dim content
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile ("c:\List.txt", 1)
content = file.ReadAll
file.Close
MsgInformation content, "title"
'Functions for simple no wait message boxes without return values.

Function MsgInformation(m, t)
    wsh.Run "mshta.exe vbscript:Execute(MsgBox("""&m&""",vbInformation,"""&t&""")(window.close))"
End Function

Надеюсь, это поможет

...