Mostra una finestra popup / messaggio da un file batch di Windows


Risposte:


121

Vorrei creare un file VBScript molto semplice e chiamarlo utilizzando CScript per analizzare i parametri della riga di comando.

Qualcosa come il seguente salvato in MessageBox.vbs:

Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox messageText

Che chiameresti come:

cscript MessageBox.vbs "This will be shown in a popup."

MsgBoxriferimento se sei interessato a percorrere questa strada.


grazie che lo farebbe, creerò un file scrivendogli questi dati, e poi usandoli, che cancellarli. dovrebbe funzionare bene :)
Billyy,

1
Bella risposta. In questo modo puoi avere il controllo totale su icone, pulsanti e titolo della casella. Inoltre quando salvi il tuo file da qualche parte lungo il PERCORSO, lo chiami da qualsiasi posizione. Ho creato alcuni file per avvisi con icone diverse.
Deus777,

Bello. A proposito, non è necessario utilizzare CScript, almeno in Win10. Con CScript, ottengo del testo aggiuntivo nel prompt dei comandi. Senza CScript, c'è solo l'avviso, il che è fantastico
A Child of God,

Non avevo cscript. Ho usato invece start.
sureshvv,

127

Prima di tutto, DOS non ha nulla a che fare con esso, probabilmente vuoi una soluzione da riga di comando di Windows (di nuovo: niente DOS, Windows puro, non solo una Finestra, ma una Console).

È possibile utilizzare il metodo VBScript fornito da boflynn oppure utilizzare in modo errato net sendo msg. net sendfunziona solo su versioni precedenti di Windows:

net send localhost Some message to display

Questo dipende anche dal servizio Messenger, tuttavia.

Per le versioni più recenti (XP e successive, apparentemente):

msg "%username%" Some message to display

Va notato che una finestra di messaggio inviata utilizzando msg.exedurerà solo 60 secondi. Questo può tuttavia essere ignorato con l' /time:xxinterruttore.


2
È possibile utilizzare le variabili env per ottenere l'utente locale -% USERNAME%. msg.exe si trova sul mio computer XP Home, ma ho sentito degli account aneddotici che non si trovano su tutte le versioni di Vista. Credo che il servizio dietro NET SEND sia disabilitato in questi giorni.
McDowell,

Bene, grazie, ho dimenticato envvar (raramente uso qualsiasi cosa oltre% UserProfile% e i miei quelli definiti in batch :)). Divertente, però, hai ragione sul servizio Messenger. Non esiste nemmeno sulla mia macchina virtuale XP, ma esiste ancora l'invio netto. msg.exe funziona lì, però.
Joey,

18
Pensavo che tra le risposte mancasse un'opzione praticabile e l'ho fornita. Niente di male qui. Né devi sentirti costretto a fare qualcosa, né sto in qualche modo dicendo che boflynn ha torto. Stavo solo aggiungendo un'altra opzione che dovrebbe andare perfettamente bene per le domande che non hanno una sola risposta definitiva. Inoltre, probabilmente non sei l'unico con questa domanda e altri potrebbero non voler utilizzare VBScript per qualsiasi motivo. Questo è un sito della comunità, non solo tuo :-)
Joey,

8
Io stesso ho usato questo per generare un messaggio "Ti amo" sul PC della mia ragazza da una shell remota.
Camilo Martin,

1
Su Windows 8 e 10 ho trovato la versione di Windows importante. Per me funziona su pro ma non a casa. Altri hanno riferito che funziona su Home Premium ed Enterprise, Ultimate ecc. Sembra che la vecchia casa non la capisca (non esiste in System32, ma può essere aggiunta).
shox,

84

Potrebbe visualizzare un po 'di flash, ma non sono necessari file temporanei. Dovrebbe funzionare fino a qualche parte dell'era IE5 (IIRC).

mshta javascript:alert("Message\n\nMultiple\nLines\ntoo!");close();

Non dimenticare di sfuggire alle parentesi se stai usando if:

if 1 == 1 (
   mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)

Questo funziona perfettamente dal prompt dei comandi, ma quando mi attengo in un file batch, ottengo questo errore: close() was unexpected at this time.
eye_mew,

@eye_mew forse devi rimuovere quei ^personaggi di escape in un file bat
phuclv,

1
Ha funzionato perfettamente per me da un file batch (sono su Windows 7) Possiamo eseguire Javascript in questo modo? Come restituiremmo i valori nel file batch?
Jerry Jeremiah,

1
Ecco alcuni esempi sorprendenti di cose che puoi fare: dostips.com/forum/viewtopic.php?t=5311 L'esempio LocalDateTime restituisce un valore. Grazie per l'idea!
Jerry Jeremiah,

Raffreddare node.js di Microsoft prima che JavaScript sul lato server fosse interessante - un'occasione persa per loro.
Daniel Sokolowski,

76

Verrà visualizzata un'altra finestra del prompt dei comandi:

START CMD /C "ECHO My Popup Message && PAUSE"

1
fantastico! potrei usarlo in alcuni altri script :)
Billyy,

3
Un'opzione migliore sarebbe:, start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"modifica cols=18la quantità di caratteri nel messaggio + 2. E il lines=2qualunque sia la quantità di righe è + 1.
ender_scythe

1
sbarazzarsi della pausa e usarecmd /k
Artelius

34

Provare :

Msg * "insert your message here" 

Se si utilizza command.com di Windows XP, si aprirà una finestra di messaggio.

L'apertura di una nuova finestra cmd non è proprio quello che stavi chiedendo, mi pare. Puoi anche usare VBScript e usarlo con il tuo file .bat. Lo apriresti dal file bat con questo comando:

cd C:\"location of vbscript"

Quello che fa è cambiare la directory command.com cercherà i file da, quindi nella riga successiva:

"insert name of your vbscript here".vbs

Quindi si crea un nuovo documento di Blocco note , digitare

<script type="text/vbscript">
    MsgBox "your text here"
</script>

Dovresti quindi salvarlo come file .vbs (inserendo ".vbs" alla fine del nome file), salvalo come "Tutti i file" nella casella a discesa sotto il nome del file (quindi non viene salvato come .txt ), quindi fai clic su Salva!


3
Non hai bisogno del <script/>tag.
surfasb,

? come inserire new-line (righe vuote) nel testo quando si utilizza -> MSG * <testo>
ZEE

@ZEE Se usi solo msg *ti verrà richiesto di inserire un messaggio seguito da ctrl-Z. Puoi inserire qui delle interruzioni di riga che verranno visualizzate nel tuo messaggio.
Utente 5910

30

Pochi altri modi.

1) Il più geek e hacker - usa IEXPRESS per creare un piccolo exe che creerà un pop-up con un solo pulsante ( può creare altri due tipi di messaggi pop-up ). Funziona su OGNI Windows da XP in poi:

;@echo off
;setlocal

;set ppopup_executable=popupe.exe
;set "message2=click OK to continue"
;
;del /q /f %tmp%\yes >nul 2>&1
;
;copy /y "%~f0" "%temp%\popup.sed" >nul 2>&1

;(echo(FinishMessage=%message2%)>>"%temp%\popup.sed";
;(echo(TargetName=%cd%\%ppopup_executable%)>>"%temp%\popup.sed";
;(echo(FriendlyName=%message1_title%)>>"%temp%\popup.sed"
;
;iexpress /n /q /m %temp%\popup.sed
;%ppopup_executable%
;rem del /q /f %ppopup_executable% >nul 2>&1

;pause

;endlocal
;exit /b 0


[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[SourceFiles]
SourceFiles0=C:\Windows\System32\
[SourceFiles0]
%FILE0%=


[Strings]
AppLaunched=subst.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="subst.exe"
DisplayLicense=
InstallPrompt=

2) Utilizzo MSHTA. Funziona anche su tutti i computer Windows da XP e superiori (nonostante l'OP non desideri linguaggi "esterni", il JavaScript qui è ridotto a icona). Dovrebbe essere salvato come .bat:

@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */

alert("Hello, world!");

o in una riga:

mshta "about:<script>alert('Hello, world!');close()</script>"

o

mshta "javascript:alert('message');close()"

o

mshta.exe vbscript:Execute("msgbox ""message"",0,""title"":close")

3) Ecco un .bat/jscriptibrido parametrizzato (dovrebbe essere salvato comebat ). Utilizza nuovamente JavaScript nonostante la richiesta OP, ma essendo un pipistrello può essere chiamato come file bat senza preoccupazioni. Utilizza POPUP che consente un po 'più controllo rispetto al più popolare MSGBOX . Utilizza WSH, ma non MSHTA come nell'esempio sopra.

 @if (@x)==(@y) @end /***** jscript comment ******
     @echo off

     cscript //E:JScript //nologo "%~f0" "%~nx0" %*
     exit /b 0

 @if (@x)==(@y) @end ******  end comment *********/


var wshShell = WScript.CreateObject("WScript.Shell");
var args=WScript.Arguments;
var title=args.Item(0);

var timeout=-1;
var pressed_message="button pressed";
var timeout_message="timed out";
var message="";

function printHelp() {
    WScript.Echo(title + "[-title Title] [-timeout m] [-tom \"Time-out message\"] [-pbm \"Pressed button message\"]  [-message \"pop-up message\"]");
}

if (WScript.Arguments.Length==1){
    runPopup();
    WScript.Quit(0);
}

if (args.Item(1).toLowerCase() == "-help" || args.Item(1).toLowerCase() == "-h" ) {
    printHelp();
    WScript.Quit(0);
}

if (WScript.Arguments.Length % 2 == 0 ) {
    WScript.Echo("Illegal arguments ");
    printHelp();
    WScript.Quit(1);
}

for (var arg = 1 ; arg<args.Length;arg=arg+2) {

    if (args.Item(arg).toLowerCase() == "-title") {
        title = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-timeout") {
        timeout = parseInt(args.Item(arg+1));
        if (isNaN(timeout)) {
            timeout=-1;
        }
    }

    if (args.Item(arg).toLowerCase() == "-tom") {
        timeout_message = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-pbm") {
        pressed_message = args.Item(arg+1);
    }

    if (args.Item(arg).toLowerCase() == "-message") {
        message = args.Item(arg+1);
    }
}

function runPopup(){
    var btn = wshShell.Popup(message, timeout, title, 0x0 + 0x10);

    switch(btn) {
        // button pressed.
        case 1:
            WScript.Echo(pressed_message);
            break;

        // Timed out.
        case -1:
           WScript.Echo(timeout_message);
           break;
    }
}

runPopup();

4) e uno jscript.net/.bat ibrido (dovrebbe essere salvato come .bat). Questa volta utilizza .NETe compila un piccolo .exefile che potrebbe essere eliminato:

@if (@X)==(@Y) @end /****** silent jscript comment ******

@echo off
::::::::::::::::::::::::::::::::::::
:::       compile the script    ::::
::::::::::::::::::::::::::::::::::::
setlocal


::if exist "%~n0.exe" goto :skip_compilation

:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
    if exist "%%v\jsc.exe" (
        rem :: the javascript.net compiler
        set "jsc=%%~dpsnfxv\jsc.exe"
        goto :break_loop
    )
)
echo jsc.exe not found && exit /b 0
:break_loop



call %jsc% /nologo /out:"%~n0.exe" "%~f0" 
::::::::::::::::::::::::::::::::::::
:::       end of compilation    ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation

::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0

****** end of jscript comment ******/

import System;
import System.Windows;
import System.Windows.Forms

var arguments:String[] = Environment.GetCommandLineArgs();
MessageBox.Show(arguments[1],arguments[0]);

5) e alla fine una singola chiamata a PowerShell che crea un pop-up (può essere chiamato dalla riga di comando o dal batch se PowerShell è installato):

powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")

6) E l'approccio del dbenham visto qui

start "" cmd /c "echo(&echo(&echo              Hello world!     &echo(&pause>nul"

7 ) Per le notifiche di una barra delle applicazioni puoi provare questo :

call SystemTrayNotification.bat  -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question

29

In questo modo il tuo file batch creerà uno script VBS e mostrerà un popup. Dopo l'esecuzione, il file batch eliminerà quel file intermedio.

Il vantaggio dell'utilizzo di MSGBOX è che è davvero personalizzabile (cambia il titolo, l'icona ecc.) Mentre MSG.exe non è così tanto.

echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q

15

Ecco una variante di PowerShell che non richiede il caricamento di assembly prima di creare la finestra, tuttavia è notevolmente più lenta (~ + 50%) rispetto al comando MessageBox di PowerShell pubblicato qui da @npocmaka:

powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)

È possibile modificare l'ultimo parametro da "0x0" a un valore inferiore per visualizzare le icone nella finestra di dialogo (vedere Metodo popup per ulteriori riferimenti):

        Fermare0x10 Stop
        Punto interrogativo0x20 Punto interrogativo
        Punto esclamativo0x30 Punto esclamativo
        Segno informativo0x40 Punto informativo

Adattato dall'articolo di Microsoft TechNet Suggerimento: utilizzare PowerShell per visualizzare la finestra a comparsa .


10
echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs

–Puoi scrivere qualsiasi numero compreso tra 0,1,2,3,4 anziché 0 (prima del simbolo '+') e qui c'è il significato di ogni numero:

0 = Ok Button  
1 = Ok/Cancel Button  
2 = Abort/Retry/Ignore button  
3 = Yes/No/Cancel  
4 = Yes/No  

–Puoi scrivere qualsiasi numero da 16,32,48,64 invece di 16 (dopo il simbolo '+') e qui c'è il significato di ogni numero:

16 – Critical Icon  
32 – Warning Icon  
48 – Warning Message Icon   
64 – Information Icon  

2
Come si ottiene una risposta dallo script VB?
Suit Boy Apps

7

Messaggio * "inserisci il tuo messaggio qui"

funziona bene, basta salvare come file .bat nel blocco note o assicurarsi che il formato sia impostato su "tutti i file"


I documenti dicono che "*" invierà un messaggio a tutte le sessioni sul server specificato ", ad es. interromperà i servizi terminal o il cambio rapido utente
Fowl

2
potresti usaremsg %SESSIONNAME% msg
Fowl il

5
msg * /time:0 /w Hello everybody!

Questo messaggio attende per sempre fino a quando si fa clic su OK (per impostazione predefinita dura solo un minuto) e funziona correttamente in Windows 8.1


La stessa risposta è presente dal 2009
jeb,

Oops> _ <Per favore cancellalo :)
MoE bis

? come inserire new-line (righe vuote) nel testo
ZEE

3
msg * /time:0 /w <C:\Somewhere\Message.txtdove nel file è testo normale (contenente CrLf).
MoE bis

4

Per fare ciò, è necessario disporre di un piccolo programma che visualizza una finestra di messaggio ed eseguirlo dal file batch.

È possibile aprire una finestra della console che visualizza un prompt, ma non è possibile ottenere una finestra di messaggio della GUI utilizzando solo cmd.exe e gli amici, AFAIK.


un prompt potrebbe farlo ... ne hai di più?
Billyy,

1
echo "xx", pause o set / p var = prompt sono opzioni cmd.exe
Macke,

@ nickl: meglio così?
Macke,

3

Uso un'utilità denominata msgbox.exe da qui: http://www.paulsadowski.com/WSH/cmdprogs.htm


Secondo l'antivirus Symantec, questo archivio contiene un Trojan.
David,

3
@ David - Ho avuto file batch e di testo contrassegnati come ostili dagli antivirus. In effetti, l'antivirus AVG ha ricevuto un'istruzione da riga di comando e ha affermato che si trattava di un virus.
James K,

2
FWIW Virus Total afferma che i controllori di virus 11/51 rilevano i virus su quel file: virustotal.com/en/file/…
Matthew Lock

3

Puoi usare Zenity . Zenity consente l'esecuzione di finestre di dialogo negli script da riga di comando e shell. Ulteriori informazioni sono disponibili anche su Wikipedia .

È multipiattaforma: un programma di installazione di Windows per Windows è disponibile qui .


3

Seguendo la risposta di @ Fowl, puoi migliorarlo con un timeout per apparire solo per 10 secondi usando quanto segue:

mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"

Vedi qui per maggiori dettagli.


Rilevato come virus xD
Julien

2

È possibile richiamare la funzione dll da user32.dll penso che qualcosa del genere

Rundll32.exe user32.dll, MessageBox (0, "text", "titleText", {flag extra per la casella dei messaggi più in alto, ecc})

Digitando dal mio telefono, non giudicarmi ... altrimenti collegherei le bandiere extra.


Posso rundll32.exe user32.dll,MessageBoxA Xvisualizzare una finestra di messaggio con X come titolo quando lo faccio nella casella Esegui. Indipendentemente da ciò che creo, X non riesco a interpretarlo come più parametri: tutto va nel titolo. Quindi rundll32.exe user32.dll,MessageBoxA (0, "MyTitle", "MyText", 0)visualizza una finestra di messaggio con il titolo (0, "MyTitle", "MyText", 0) Ma non riesco a farlo funzionare affatto dalla riga di comando - solo dalla casella Esegui. Sulla riga di comando non fa nulla. Funziona sicuramente da una riga di comando o da un file batch o solo dalla casella Esegui?
Jerry Jeremiah,

rundll32.exe come da documento può eseguire solo le procedure progettate appositamente per questo scopo, poiché devono analizzare la parte "argomenti opzionali". Le funzioni di MessageBox non sono state progettate in questo modo. Perché funziona tramite Win + R (Run box), è ancora una grande domanda!
Yuriy Pozniak,

1

msg * /server:127.0.0.1 Digita qui il tuo messaggio


Windows cmd.exe dice: "msg" non è riconosciuto come comando interno o esterno, programma eseguibile o file batch.
Anthony Hatzopoulos,

@AnthonyHatzopoulos è perché è supportato solo in XP
pattyd

@pattyd XP e successivamente, in realtà
Jesan Fafon,

@JesanFafon no, è stato interrotto dopo XP ... Penso che intendi XP e precedenti
Pattyd

@pattyd Su Windows 8.1, where msgritorna C:\Windows\System32\msg.exe. Penso che tu stia pensandonet send
Jesan Fafon,

1

Questa applicazione può farlo, se converti (avvolgi) i tuoi file batch in file eseguibili.


  1. Messagebox semplice

    %extd% /messagebox Title Text
    

  1. Error Messagebox

    %extd% /messagebox  Error "Error message" 16
    
  2. Annulla Riprova Messagebox

    %extd% /messagebox Title "Try again or Cancel" 5
    

4) Messagebox "Non chiedermelo più"

%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}

0

Un'opzione migliore

set my_message=Hello world&& start cmd /c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"


Descrizione:
lines= quantità di righe, più 1
cols= quantità di caratteri nel messaggio, più 3 (Tuttavia, il minimo deve essere 15)

colsVersione calcolata automaticamente :

set my_message=Hello world&& (echo %my_message%>EMPTY_FILE123 && FOR %? IN (EMPTY_FILE123 ) DO SET strlength=%~z? && del EMPTY_FILE123 ) && start cmd /c "@echo off && mode con lines=2 cols=%strlength% && echo %my_message% && pause>nul"


Il commento di @ender_scythe funziona ( start cmd /c "@echo off & mode con cols=18 lines=2 & echo My Popup Message & pause>nul"). Il tuo no. Fa eco al messaggio ma non riesce a impostare la dimensione della finestra che ritorna The screen cannot be set to the number of lines and columns specified.almeno nel mio Windows 7.
cdlvcdlv

@cdlvcdlv Ho aggiornato la risposta. dovrebbe funzionare ora per tutti, rivederlo.
T.Todua,

Funziona davvero ... a condizione che non ci sia un file chiamato xnella directory corrente o non ti dispiaccia perderlo.
cdlvcdlv,

Hai preso un commento perfettamente funzionante e l'hai rotto. Quindi hai provato ad aggiungere un po 'di valore (te lo concedo) ma poi al prezzo di perdere qualsiasi file con un nome non così improbabile. Se qualcuno, (per curiosità) prova il tuo codice con una tale sfortuna, perderà definitivamente il file. Inoltre, se esiste una cartella denominata x, il comando non riesce. Non ringraziarmi e per favore correggi il tuo codice. Non hai nemmeno bisogno di usare un liner. E se ritieni che il tuo codice sia così buono, per favore pubblicalo in Code Review .
cdlvcdlv,

che ingratitudine .... non ho rotto, ma aggiornato, spiegato e persino dato una soluzione automatica ... (ma ci sono persone come te, che non posso soddisfare). buona fortuna
T.Todua,

0

Ecco il mio script batch che ho messo insieme sulla base delle buone risposte qui e in altri post

Puoi impostare il timeout del titolo e persino la sospensione per programmarlo per quest'ultimo & \ n per la nuova riga

Denominalo popup.bat e mettilo nella cartella del tuo percorso di Windows per funzionare a livello globale sul tuo PC

Ad esempio popup Line 1\nLine 2produrrà una finestra pop-up a 2 righe (digitare popup /?per l'uso)

Ecco il codice

<!-- : Begin CMD
@echo off
cscript //nologo "%~f0?.wsf" %*
set pop.key=[%errorlevel%]
if %pop.key% == [-1] set pop.key=TimedOut
if %pop.key% == [1]  set pop.key=Ok
if %pop.key% == [2]  set pop.key=Cancel
if %pop.key% == [3]  set pop.key=Abort
if %pop.key% == [4]  set pop.key=Retry
if %pop.key% == [5]  set pop.key=Ignore
if %pop.key% == [6]  set pop.key=Yes
if %pop.key% == [7]  set pop.key=No
if %pop.key% == [10] set pop.key=TryAgain
if %pop.key% == [11] set pop.key=Continue
if %pop.key% == [99] set pop.key=NoWait
exit /b 
-- End CMD -->

<job><script language="VBScript">
'on error resume next
q   =""""
qsq =""" """
Set objArgs = WScript.Arguments
Set objShell= WScript.CreateObject("WScript.Shell")
Popup       =   0
Title       =   "Popup"
Timeout     =   0
Mode        =   0
Message     =   ""
Sleep       =   0
button      =   0
If objArgs.Count = 0 Then 
    Usage()
ElseIf objArgs(0) = "/?" or Lcase(objArgs(0)) = "-h" or Lcase(objArgs(0)) = "--help" Then 
    Usage()
End If
noWait = Not wait() 
For Each arg in objArgs
    If (Mid(arg,1,1) = "/") and (InStr(arg,":") <> 0) Then haveSwitch   =   True
Next
If not haveSwitch Then 
    Message=joinParam("woq")
Else
    For i = 0 To objArgs.Count-1 
        If IsSwitch(objArgs(i)) Then 
            S=split(objArgs(i) , ":" , 2)
                select case Lcase(S(0))
                    case "/m","/message"
                        Message=S(1)
                    case "/tt","/title"
                        Title=S(1)
                    case "/s","/sleep"
                        If IsNumeric(S(1)) Then Sleep=S(1)*1000
                    case "/t","/time"
                        If IsNumeric(S(1)) Then Timeout=S(1)
                    case "/b","/button"
                        select case S(1)
                            case "oc", "1"
                                button=1
                            case "ari","2"
                                button=2
                            case "ync","3"
                                button=3
                            case "yn", "4"
                                button=4
                            case "rc", "5"
                                button=5
                            case "ctc","6"
                                button=6
                            case Else
                                button=0
                        end select
                    case "/i","/icon"
                        select case S(1)
                            case "s","x","stop","16"
                                Mode=16
                            case "?","q","question","32"
                                Mode=32
                            case "!","w","warning","exclamation","48"
                                Mode=48
                            case "i","information","info","64"
                                Mode=64
                            case Else 
                                Mode=0
                        end select
                end select
        End If
    Next
End If
Message = Replace(Message,"/\n", "°"  )
Message = Replace(Message,"\n",vbCrLf)
Message = Replace(Message, "°" , "\n")
If noWait Then button=0

Wscript.Sleep(sleep)
Popup   = objShell.Popup(Message, Timeout, Title, button + Mode + vbSystemModal)
Wscript.Quit Popup

Function IsSwitch(Val)
    IsSwitch        = False
    If Mid(Val,1,1) = "/" Then
        For ii = 3 To 9 
            If Mid(Val,ii,1)    = ":" Then IsSwitch = True
        Next
    End If
End Function

Function joinParam(quotes)
    ReDim ArgArr(objArgs.Count-1)
    For i = 0 To objArgs.Count-1 
        If quotes = "wq" Then 
            ArgArr(i) = q & objArgs(i) & q 
        Else
            ArgArr(i) =     objArgs(i)
        End If
    Next
    joinParam = Join(ArgArr)
End Function

Function wait()
    wait=True
    If objArgs.Named.Exists("NewProcess") Then
        wait=False
        Exit Function
    ElseIf objArgs.Named.Exists("NW") or objArgs.Named.Exists("NoWait") Then
        objShell.Exec q & WScript.FullName & qsq & WScript.ScriptFullName & q & " /NewProcess: " & joinParam("wq") 
        WScript.Quit 99
    End If
End Function

Function Usage()
    Wscript.Echo _
                     vbCrLf&"Usage:" _
                    &vbCrLf&"      popup followed by your message. Example: ""popup First line\nescaped /\n\nSecond line"" " _
                    &vbCrLf&"      To triger a new line use ""\n"" within the msg string [to escape enter ""/"" before ""\n""]" _
                    &vbCrLf&"" _
                    &vbCrLf&"Advanced user" _
                    &vbCrLf&"      If any Switch is used then you must use the /m: switch for the message " _
                    &vbCrLf&"      No space allowed between the switch & the value " _
                    &vbCrLf&"      The switches are NOT case sensitive " _
                    &vbCrLf&"" _
                    &vbCrLf&"      popup [/m:""*""] [/t:*] [/tt:*] [/s:*] [/nw] [/i:*]" _
                    &vbCrLf&"" _
                    &vbCrLf&"      Switch       | value |Description" _
                    &vbCrLf&"      -----------------------------------------------------------------------" _
                    &vbCrLf&"      /m: /message:| ""1 2"" |if the message have spaces you need to quote it " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /t: /time:   | nn    |Duration of the popup for n seconds " _
                    &vbCrLf&"                   |       |<Default> untill key pressed" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /tt: /title: | ""A B"" |if the title have spaces you need to quote it " _
                    &vbCrLf&"                   |       | <Default> Popup" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /s: /sleep:  | nn    |schedule the popup after n seconds " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /nw /NoWait  |       |Continue script without the user pressing ok - " _
                    &vbCrLf&"                   |       | botton option will be defaulted to OK button " _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /i: /icon:   | ?/q   |[question mark]"  _
                    &vbCrLf&"                   | !/w   |[exclamation (warning) mark]"  _
                    &vbCrLf&"                   | i/info|[information mark]"  _
                    &vbCrLf&"                   | x/stop|[stop\error mark]" _
                    &vbCrLf&"                   | n/none|<Default>" _
                    &vbCrLf&"                   |       |" _
                    &vbCrLf&"      /b: /button: | o     |[OK button] <Default>"  _
                    &vbCrLf&"                   | oc    |[OK and Cancel buttons]"  _
                    &vbCrLf&"                   | ari   |[Abort, Retry, and Ignore buttons]"  _
                    &vbCrLf&"                   | ync   |[Yes, No, and Cancel buttons]" _
                    &vbCrLf&"                   | yn    |[Yes and No buttons]" _
                    &vbCrLf&"                   | rc    |[Retry and Cancel buttons]" _
                    &vbCrLf&"                   | ctc   |[Cancel and Try Again and Continue buttons]" _
                    &vbCrLf&"      --->         | --->  |The output will be saved in variable ""pop.key""" _
                    &vbCrLf&"" _
                    &vbCrLf&"Example:" _
                    &vbCrLf&"        popup /tt:""My MessageBox"" /t:5 /m:""Line 1\nLine 2\n/\n\nLine 4""" _
                    &vbCrLf&"" _
                    &vbCrLf&"                     v1.9 By RDR @ 2020"
    Wscript.Quit
End Function

</script></job>

-3

deve solo pop-up quando si è all'interno di un VM, quindi tecnicamente dovrebbe esserci un codice come:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code

downvote perché l'installazione non proseguirà se (% machine_type% == virtual_machine) == true
anione
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.