Como exibir uma Msgbox diretamente do CMD

8

Gostaria de exibir uma mensagem para o usuário usando o CMD. A maneira que eu sei fazer isso é criar um arquivo .vbs (VBScript) e executá-lo no CMD assim:

(echo MsgBox "Line 1" ^& vbCrLf ^& "Line 2",262192, "Title")> File.vbs

start File.vbs

Mas o que eu quero fazer é exibir a mensagem sem criar nenhum arquivo, diretamente do CMD. Talvez usando um comando para executar VBScripts diretamente do CMD.

    
por Bita 18.12.2017 / 01:50

4 respostas

7

Como sugerido por @wysiwyg, nas versões Pro / Business * do Windows, você está procurando o comando Msg . Está disponível em todas as versões modernas do Windows (pelo menos até o XP). Para exibir uma mensagem para o usuário conectado no momento, execute o seguinte:

msg %username% Your message here

O resultado é assim:

UmaconsideraçãocomestecomandoéquevocênãopodepersonalizarotextodaBarradeTítulo.

VocêpodesabermaissobreoMsg no TechNet .

* Se você precisa de uma solução que funcione em todas edições do Windows, incluindo Home , na minha opinião o método VBScript que você já conhece é a solução mais simples para este problema. Ele funciona em todas as versões e edições modernas do Windows em sua configuração padrão e é fácil de usar.

    
por 18.12.2017 / 03:07
4

Como outros já disseram, não há como fazer isso puramente com o cmd, mas embora esse seja o título da questão, parece-me que a parte sem arquivo é mais importante para você e sob certas circunstâncias, isso pode ser possível.

Com o powershell, deve ser possível executar o código sem nenhum arquivo como este:

PowerShell -Command "Add-Type -AssemblyName PresentationFramew
ork;[System.Windows.MessageBox]::Show('Hello World')"

O VBS não permite a execução direta de código via cscript ou wscript, mas o mshta sim. Você pode usá-lo assim (se precisar de várias linhas, use ':' como um delimitador):

mshta vbscript:Execute("msgbox ""Hello World"":close")

Como é baseado, pode ser afetado por algumas restrições do tipo gpo, então, se você tiver a opção, o powershell provavelmente é a aposta mais segura

    
por 30.01.2018 / 16:26
2

Eu precisava de algo parecido com isso hoje. Como não consegui encontrar uma solução de dependência externa da qual gostei, já que não sou realmente fã do VBScript / Powershell, fui em frente e escrevi uma:

link

As caixas de mensagens que produz são modais para a janela atual do console. Ou seja, o usuário não pode fazer nada até fechar a caixa de diálogo. Além disso, o código de retorno da chamada MessageBox() é retornado ao chamador para que um script possa reagir a qualquer botão que tenha sido pressionado. E, claro, ele oferece suporte a toda a gama de opções para a API MessageBox() Win32.

Adicionar um executável de 80 KB à mistura pode não ser a xícara de chá de todos. No entanto, ele está vinculado estaticamente ao tempo de execução do VC ++ e suporta o Unicode, o que explica por que o arquivo é tão grande, devido à natureza minimalista do que ele faz. E há uma pequena questão de não ser possível passar facilmente em novas linhas da linha de comando para exibir mensagens de múltiplas linhas. Em uma pequena vantagem, ele exibe o diálogo em menos tempo de relógio de parede do que qualquer outra solução apresentada até agora.

É claro que, se o tamanho do arquivo não importa e as caixas de diálogo criam uma experiência de usuário muito "cara a cara" e / ou não exigem interação do usuário, também corri para este projeto bacana:

link

Que exibe um balão pop-up na área de notificação de status da tela usando IUserNotification . A desvantagem é que o executável Notifu é executado com pouco menos de 240 KB. Outro exemplo infeliz que o COM cria um inchaço desnecessário e me deixa desejando que houvesse uma API simples e leve para o recurso.

Para algo cross-platform, há zenity. É principalmente para Linux, mas também existem portas Mac e Windows. A porta do Windows do zenity tem mais de 1 MB de tamanho, porque, bem, o GTK está bastante inchado.

    
por 26.08.2018 / 05:06
0

Eu tenho uma maneira de fazer isso com cmd, mas basicamente inclui um arquivo, mas o arquivo é excluído instantaneamente depois que o vbs é executado. Então não é realmente. Você pode fazer:

echo x=msgbox("Hey! Here is a message!",Type+Icon+Action,"Hey! Here is a title!") > %tmp%\tmp.vbs
cscript //nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs

Digite + Ícone + Ação é apenas básica vbs, para uma referência, aqui. link O código que eu mostrei faz um arquivo que tem código VBS nele, então ele executa isto usando cscript, então ele apaga o arquivo depois que ele é executado, fazendo parecer que foi chamado pelo prompt do cmd. Para parecer mais, basta usar @echo off. Espero que isso tenha ajudado!

    
por 09.09.2018 / 20:46