Bir Msgbox'ı doğrudan CMD'den görüntüleme


16

CMD kullanarak kullanıcıya bir mesaj görüntülemek istiyorum. Bunu bilmenin yolu bir .vbs (VBScript) dosyası oluşturmak ve CMD'den şu şekilde çalıştırmaktır:

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

start File.vbs

Ama yapmak istediğim, mesajı doğrudan CMD'den herhangi bir dosya oluşturmadan görüntülemek. Belki de VBScripts'i CMD'den çalıştırmak için bir komut kullanarak.


msgKomuta bak . Windows'un bir Home sürümünü çalıştırıyorsanız bu olmayabilir, ancak yalnızca bir Pro kurulumundan msg.exe dosyasını kopyalayıp yapıştırarak ekleyebilirsiniz.
wysiwyg

Bir yol varsa tüm windows 10 sürümleri için biraz daha "evrensel" bir şey olurdu.
Bita

Her zaman bir powershell de vardır. Microsoft, cmd istemini ortadan kaldırmaya geçişi açıkça başlatmış olsa da, genellikle göz ardı edildi.
Aralık'ta Appleoddity

Yanıtlar:


9

Diğerleri söylediler cmd ile tamamen bunu yapmanın bir yolu yoktur ama bu soru başlık olmasına rağmen, kısım geliyor bana dosyası olmadan bu mümkün olabilir size ve belirli şartlar altında daha önemlidir.

Powershell ile kodu aşağıdaki gibi bir dosya olmadan çalıştırmak mümkün olmalıdır:

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

VBS, kodun cscript veya wscript ile doğrudan yürütülmesine izin vermez, ancak mshta bunu yapar. Bunu şu şekilde kullanabilirsiniz (birden fazla satıra ihtiyacınız varsa sınırlayıcı olarak ':' kullanın):

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

Yani tabanlı olduğu için bazı gpo kısıtlamalarından etkilenebilir, bu yüzden seçim gücünüz varsa muhtemelen daha güvenli bir bahis


Yukarıdaki uyarıya ek olarak mshta, bazı antivirüs yazılımları bunu istenmeyen bir işlem olarak kabul eder. İş yerinde, onu çalıştırma girişimim, tüm makinemi karantinaya almak ve ağdan çıkarmak için aşırı derecede kurumsal bir ürünle (SentinelOne) sonuçlandı.
Jason

15

@Wysiwyg tarafından önerildiği gibi, Windows'un Pro / Business sürümlerinde * Msgkomutu arıyorsunuz . Windows'un tüm modern sürümlerinde (en azından XP'ye kadar) mevcuttur. Oturum açmış olan kullanıcıya bir mesaj görüntülemek için aşağıdakileri çalıştırın:

msg %username% Your message here

Sonuç şuna benzer: resim açıklamasını buraya girin

Bu komutla ilgili bir husus, Başlık Çubuğu metnini özelleştirememenizdir.

TechNet'te Msg hakkında daha fazla bilgi edinebilirsiniz .


* Home da dahil olmak üzere tüm Windows sürümlerinde çalışan bir çözüme ihtiyacınız varsa , bence zaten bildiğiniz VBScript yöntemi bu sorunun en basit çözümüdür. Varsayılan yapılandırmalarında Windows'un tüm modern sürümlerinde ve sürümlerinde çalışır ve kullanımı kolaydır.


1
Tamamen doğru değil. Windows çıktığından beri bir dps mesaj kutusu komutu vardı. Olası bir istismar olarak görüldüğü için Windows 7 veya 8'de kaldırıldığına inanıyorum.
Keltari

2

Bugün buna benzer bir şeye ihtiyacım vardı. Gerçekten VBScript / Powershell hayranı olmadığım için sevdiğim harici bir bağımlılık çözümü bulamadığım için, devam ettim ve bir tane yazdım:

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

Ürettiği mesaj kutular kalıcı akım konsol penceresine. Yani, kullanıcı iletişim kutusunu kapatana kadar hiçbir şey yapamaz. Ayrıca, MessageBox()bir komut dosyasının hangi düğmeye basıldığında tepki verebilmesi için çağrıdaki dönüş kodu arayana döndürülür. Ve elbette, MessageBox()Win32 API için tüm seçenekleri destekler .

Karışıma 80KB yürütülebilir dosyası eklemek herkesin çayı olmayabilir. Yine de statik olarak VC ++ çalışma zamanına bağlı ve Unicode'u destekliyor, bu da dosyanın yaptığı şeyin minimalist doğası göz önüne alındığında neden bu kadar büyük olduğunu açıklıyor. Ve çok satırlı iletileri görüntülemek için komut satırından kolayca yeni satırlara geçememe gibi küçük bir sorun var. Küçük bir ters tarafta, iletişim kutusunu şimdiye kadar sunulan diğer çözümlerden daha az duvar saati zamanında görüntüler.

Tabii ki, dosya boyutu önemli değilse ve iletişim kutuları çok "yüzünüzde" bir kullanıcı deneyimi yaratıyorsa ve / veya kullanıcı etkileşimi gerektirmiyorsa, ben de bu şık projeye rastladım:

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

Bu, IUserNotification kullanarak ekranın durum bildirim alanında bir açılır pencere balonu görüntüler . Dezavantajı, Notifu yürütülebilir 240KB sadece utangaç çalışır. COM'un gereksiz şişkinlik yarattığı ve bana özellik için basit ve hafif bir API olmasını isteyen bir talihsiz örnek.

Platformlar arası bir şey için zenity var. Çoğunlukla Linux için ama Mac ve Windows bağlantı noktaları da var. Windows Zenity bağlantı noktasının boyutu 1MB'ın üzerindedir, çünkü GTK oldukça şişirilmiştir.


Yerel Windows sürümleri zaten var olan user32 / comctl DLL'leri alırken tüm gtk'yi dahili olarak göndermesi gerektiğinden değil mi?
user1686

Ha? Lütfen soruyu açıklayın.
CubicleSoft

1

Ben cmd ile bunu yapmak için bir yol var, ama temelde bir dosya içerir, ancak vbs yürütüldükten sonra dosya hemen silinir. Yani gerçekten değil. Yapabilirsin :

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

Type + Icon + Action referans için sadece temel vbs'dir. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 Size gösterdiğim kod, içinde VBS kodu bulunan bir dosya yapar, sonra cscript kullanarak yürütür, sonra dosyayı çalıştırıldıktan sonra siler, cmd istemi tarafından çağrılmış gibi görünür. Daha fazla görünmesini sağlamak için @echo off kullanın. Umarım bu yardımcı oldu!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.