Cara Menampilkan Msgbox langsung dari CMD

16

Saya ingin menampilkan pesan kepada pengguna dengan menggunakan CMD. Cara saya tahu untuk melakukannya adalah dengan membuat file .vbs (VBScript) dan menjalankannya dari CMD seperti ini:

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

start File.vbs

Tapi yang ingin saya lakukan adalah menampilkan pesan tanpa membuat file apa pun, langsung dari CMD. Mungkin dengan menggunakan perintah untuk menjalankan VBScripts langsung dari CMD.

Bita
sumber
Cari msgperintahnya. Anda mungkin tidak memilikinya jika Anda menjalankan Windows edisi Home, tetapi Anda dapat menambahkannya hanya dengan menyalin dan menempel msg.exe dari instalasi Pro.
wysiwyg
Saya akan sesuatu yang sedikit lebih "universal", untuk semua versi windows 10 jika ada cara.
Bita
Selalu ada PowerShell juga. Oft diabaikan, meskipun Microsoft telah dengan jelas memulai transisi untuk menghilangkan cmd prompt.
Appleoddity

Jawaban:

9

Seperti yang telah dikatakan orang lain, tidak ada cara untuk melakukan ini dengan cmd tetapi walaupun itu adalah judul pertanyaan, bagi saya tampaknya bagian tanpa file lebih penting bagi Anda dan dalam keadaan tertentu hal ini dimungkinkan.

Dengan PowerShell seharusnya dapat menjalankan kode tanpa file seperti ini:

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

VBS tidak mengizinkan eksekusi kode secara langsung melalui cscript atau wscript tetapi mshta melakukannya. Anda dapat menggunakannya seperti ini (jika Anda membutuhkan banyak baris, gunakan ':' sebagai pembatas):

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

Karena berbasis yaitu itu mungkin dipengaruhi oleh beberapa pembatasan gpo jadi jika Anda memiliki pilihan powershell mungkin adalah taruhan yang lebih aman

Syberdoor
sumber
Selain peringatan di atas mshta, beberapa perangkat lunak antivirus menganggapnya sebagai proses yang mungkin tidak diinginkan. Di tempat kerja, upaya saya untuk menjalankannya menghasilkan produk perusahaan yang terlalu bersemangat (SentinelOne) untuk mengkarantina seluruh mesin saya dan menghapusnya dari jaringan.
Jason
15

Seperti yang disarankan oleh @wysiwyg, pada versi Pro / Bisnis * Windows Anda sedang mencari Msgperintah. Ini tersedia di semua versi modern Windows (setidaknya sejauh XP). Untuk menampilkan pesan ke pengguna yang saat ini masuk, jalankan yang berikut:

msg %username% Your message here

Hasilnya terlihat seperti ini: masukkan deskripsi gambar di sini

Satu pertimbangan dengan perintah ini adalah Anda tidak dapat mengkustomisasi teks Titlebar.

Anda dapat mempelajari lebih lanjut tentang Msg di TechNet .


* Jika Anda membutuhkan solusi yang berfungsi pada semua edisi Windows, termasuk Home , menurut saya metode VBScript yang sudah Anda ketahui adalah solusi paling sederhana untuk masalah ini. Ini berfungsi pada semua versi modern dan edisi Windows dalam konfigurasi standarnya, dan mudah digunakan.

Saya katakan Reinstate Monica
sumber
1
Tidak sepenuhnya benar. Ada perintah kotak pesan dps sejak windows keluar. Saya percaya itu dihapus pada Windows 7 atau 8 karena dipandang sebagai kemungkinan exploit.
Keltari
2

Saya membutuhkan sesuatu yang mirip dengan ini hari ini. Karena saya tidak dapat menemukan solusi ketergantungan eksternal yang saya sukai karena saya bukan penggemar VBScript / Powershell, saya melanjutkan dan menulis satu:

https://github.com/cubiclesoft/messagebox-windows

Kotak pesan yang dihasilkannya adalah modal ke jendela konsol saat ini. Artinya, pengguna tidak dapat melakukan apa pun sampai mereka menutup dialog. Juga, kode kembali dari MessageBox()panggilan dikembalikan ke penelepon sehingga skrip dapat bereaksi terhadap tombol mana saja yang ditekan. Dan, tentu saja, mendukung berbagai pilihan untuk MessageBox()Win32 API.

Menambahkan 80KB yang dapat dieksekusi ke dalam campuran mungkin bukan cangkir teh semua orang. Ia secara statis dihubungkan dengan runtime VC ++ dan mendukung Unicode, yang menjelaskan mengapa file tersebut sangat besar mengingat sifat minimalis dari apa yang dilakukannya. Dan ada masalah kecil karena tidak dapat dengan mudah meneruskan baris baru dari baris perintah untuk menampilkan pesan multiline. Pada terbalik kecil, ini menampilkan dialog dalam waktu jam dinding kurang dari solusi lain yang disajikan sejauh ini.

Tentu saja, jika ukuran file tidak masalah dan dialog membuat pengalaman pengguna terlalu "di wajah Anda" dan / atau tidak memerlukan interaksi pengguna, saya juga mengalami proyek yang bagus ini:

https://www.paralint.com/projects/notifu/

Yang menampilkan balon sembulan di area pemberitahuan status layar menggunakan IUserNotification . The downside adalah bahwa berjalan dieksekusi Notifu hanya 240KB. Contoh lain yang disayangkan bahwa COM membuat mengasapi yang tidak perlu dan membuat saya berharap ada API sederhana dan ringan untuk fitur tersebut.

Untuk sesuatu lintas platform, ada kemudahan. Ini sebagian besar untuk Linux tetapi ada port Mac dan Windows juga. Port zenity Windows berukuran lebih dari 1MB karena, well, GTK cukup besar.

CubicleSoft
sumber
Bukan karena harus mengirimkan semua gtk secara internal sementara versi Windows asli hanya mengambil DLL user32 / comctl yang sudah ada di sana?
user1686
Hah? Tolong jelaskan pertanyaannya.
CubicleSoft
1

Saya punya cara untuk melakukan ini dengan cmd, tetapi pada dasarnya tidak termasuk file, tetapi file dihapus langsung setelah vbs dieksekusi. Jadi sebenarnya tidak. Anda dapat melakukan :

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

Ketik + Ikon + Tindakan hanyalah vbs dasar, untuk referensi, di sini. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 Kode yang saya perlihatkan kepada Anda membuat file yang memiliki kode VBS di dalamnya, kemudian dijalankan menggunakan cscript, lalu menghapus file setelah dijalankan sehingga tampak seperti telah dipanggil oleh prompt cmd. Untuk membuatnya lebih terlihat seperti itu, gunakan saja @echo. Semoga ini bisa membantu!

Zer0Byt3
sumber
1

Selain itu, dengan executable eksternal (non-Windows asli) , ada

nircmd infobox "msg" "title"

Jika Anda memiliki akses ke kompiler VB6, maka one-liner ini menghasilkan executable 5.5k:

sub main
  msgbox command
end sub
Berry Tsakala
sumber