วิธีการแสดง Msgbox โดยตรงจาก CMD


16

ฉันต้องการแสดงข้อความถึงผู้ใช้โดยใช้ CMD วิธีที่ฉันรู้ว่าทำได้คือการสร้างไฟล์. vbs (VBScript) และดำเนินการจาก CMD ดังนี้:

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

start File.vbs

แต่สิ่งที่ฉันต้องการทำคือการแสดงข้อความโดยไม่ต้องสร้างไฟล์ใด ๆ โดยตรงจาก CMD อาจจะโดยใช้คำสั่งเพื่อเรียกใช้ VBScripts ได้จาก CMD


ค้นหาmsgคำสั่ง คุณอาจไม่มีหากคุณใช้ Windows รุ่น Home แต่คุณสามารถเพิ่มได้โดยเพียงแค่คัดลอกและวาง msg.exe จากการติดตั้ง Pro
wysiwyg

ฉันต้องการบางสิ่งบางอย่างมากกว่า "สากล" สำหรับ windows 10 ทุกรุ่นถ้ามีวิธี
Bita

มีอำนาจเสมอด้วย มักถูกมองข้ามแม้ว่า Microsoft ได้เริ่มต้นการเปลี่ยนเพื่อกำจัด cmd prompt อย่างชัดเจน
Appleoddity

คำตอบ:


9

อย่างที่คนอื่น ๆ บอกว่าไม่มีทางที่จะทำสิ่งนี้ด้วย cmd อย่างแท้จริง แต่ถึงแม้ว่าจะเป็นชื่อของคำถาม แต่สำหรับฉันแล้วดูเหมือนว่าส่วนที่ไม่มีไฟล์สำคัญกว่าสำหรับคุณและในบางกรณีอาจเป็นไปได้

ด้วย powershell คุณสามารถเรียกใช้โค้ดโดยไม่มีไฟล์ใด ๆ เช่นนี้

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

VBS ไม่อนุญาตให้มีการเรียกใช้โค้ดโดยตรงผ่าน cscript หรือ wscript แต่ mshta ทำ คุณสามารถใช้มันได้เช่นนี้ (หากคุณต้องการใช้หลายบรรทัดใช้ ':' เป็นตัวคั่น):

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

เนื่องจากมันเป็นเช่นนั้นมันอาจได้รับผลกระทบจากข้อ จำกัด Gpo บางอย่างดังนั้นหากคุณมีทางเลือก PowerShell น่าจะเป็นเดิมพันที่ปลอดภัย


นอกเหนือจากคำเตือนข้างต้นเกี่ยวกับmshtaซอฟต์แวร์ป้องกันไวรัสบางตัวพิจารณาว่าเป็นกระบวนการที่อาจไม่เป็นที่ต้องการ ที่ทำงานความพยายามของฉันเพื่อเรียกใช้ทำให้ผลิตภัณฑ์ระดับองค์กร (SentinelOne) เกินขอบเขตเพื่อกักกันเครื่องทั้งหมดของฉันและลบออกจากเครือข่าย
เจสัน

15

ตามที่ @wysiwyg แนะนำบน Windows รุ่น Pro / Business * คุณกำลังมองหาMsgคำสั่ง มีให้บริการใน Windows ทุกรุ่น (อย่างน้อยที่สุดกลับเป็น XP) ในการแสดงข้อความถึงผู้ใช้ที่เข้าสู่ระบบในปัจจุบันให้เรียกใช้สิ่งต่อไปนี้:

msg %username% Your message here

ผลลัพธ์จะเป็นดังนี้: ป้อนคำอธิบายรูปภาพที่นี่

สิ่งหนึ่งที่ต้องพิจารณาด้วยคำสั่งนี้คือคุณไม่สามารถกำหนดข้อความ Titlebar เองได้

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับข่าวสารบน TechNet


* หากคุณต้องการโซลูชันที่ใช้งานได้กับWindows ทุกรุ่นรวมถึงหน้าแรกในความคิดของฉันวิธี VBScript ที่คุณทราบอยู่แล้วคือวิธีแก้ปัญหาที่ง่ายที่สุดสำหรับปัญหานี้ สามารถใช้งานได้กับรุ่นที่ทันสมัยและ Windows ทุกรุ่นในการกำหนดค่าเริ่มต้นและใช้งานง่าย


1
ไม่จริงทั้งหมด มีคำสั่งกล่องข้อความ dps ตั้งแต่ windows ออกมา ฉันเชื่อว่ามันถูกลบใน Windows 7 หรือ 8 เพราะมันถูกมองว่าเป็นช่องโหว่ที่เป็นไปได้
Keltari

2

วันนี้ฉันต้องการอะไรที่คล้ายกัน เนื่องจากฉันไม่พบวิธีแก้ปัญหาการพึ่งพาภายนอกที่ฉันชอบเนื่องจากฉันไม่ใช่แฟนของ VBScript / Powershell ฉันเลยไปข้างหน้าและเขียนหนึ่ง:

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

กล่องข้อความที่สร้างนั้นเป็นโมดัลไปที่หน้าต่างคอนโซลปัจจุบัน นั่นคือผู้ใช้ไม่สามารถทำอะไรได้จนกว่าพวกเขาจะปิดกล่องโต้ตอบ นอกจากนี้โค้ดส่งคืนจากการMessageBox()โทรจะถูกส่งคืนไปยังผู้โทรเพื่อให้สคริปต์สามารถตอบสนองต่อปุ่มใดก็ได้ที่ถูกกด และแน่นอนว่ามันรองรับตัวเลือกมากมายสำหรับMessageBox()Win32 API

การเพิ่มความสามารถในการประมวลผล 80KB ลงในส่วนผสมอาจไม่ใช่ถ้วยชาของทุกคน มันถูกเชื่อมโยงแบบคงที่กับ VC ++ รันไทม์แม้ว่าและสนับสนุน Unicode ซึ่งอธิบายว่าเหตุใดไฟล์จึงมีขนาดใหญ่ และมีปัญหาเล็กน้อยที่ไม่สามารถส่งผ่านบรรทัดใหม่ได้อย่างง่ายดายจากบรรทัดคำสั่งเพื่อแสดงข้อความหลายบรรทัด ในส่วนของ upside เล็กน้อยมันจะแสดงไดอะล็อกโดยใช้เวลานาฬิกาแขวนน้อยกว่าโซลูชันอื่น ๆ ที่นำเสนอจนถึงปัจจุบัน

แน่นอนถ้าขนาดไฟล์ไม่สำคัญและกล่องโต้ตอบก็สร้างประสบการณ์การใช้งาน "ในหน้าของคุณ" และ / หรือไม่ต้องการการโต้ตอบกับผู้ใช้ฉันก็วิ่งเข้าไปในโครงการที่ดีนี้:

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

ซึ่งแสดงบอลลูนป๊อปอัพในพื้นที่แจ้งเตือนสถานะของหน้าจอโดยใช้IUserNotification ข้อเสียคือไฟล์ที่รันได้ของ Notifu นั้นมีขนาดเพียง 240KB เท่านั้น อีกตัวอย่างที่โชคร้ายที่ COM สร้าง bloat ที่ไม่จำเป็นและทำให้ฉันคิดว่ามี API ที่ง่ายและน้ำหนักเบาสำหรับคุณสมบัติ

สำหรับบางสิ่งบางอย่างข้ามแพลตฟอร์มก็มีความสุภาพ ส่วนใหญ่ใช้สำหรับ Linux แต่มีพอร์ต Mac และ Windows ด้วย Zenity พอร์ต Windows มีขนาดเกิน 1MB เพราะดี GTK ค่อนข้างป่อง


ไม่ใช่เพราะมันมีการจัดส่ง gtk ทั้งหมดภายในขณะที่ Windows รุ่นเนทีฟเพียงหยิบ user32 / comctl DLLs ที่มีอยู่แล้ว?
user1686

ฮะ? โปรดอธิบายคำถาม
CubicleSoft

1

ฉันมีวิธีการทำเช่นนี้กับ cmd แต่โดยทั่วไปจะรวมไฟล์ แต่ไฟล์จะถูกลบทันทีหลังจาก vbs ถูกดำเนินการ ดังนั้นมันไม่ได้จริงๆ คุณทำได้ :

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 เป็นเพียง vbs พื้นฐานสำหรับการอ้างอิงที่นี่ https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 รหัสที่ฉันแสดงให้คุณเห็นคือไฟล์ที่มีรหัส VBS ในนั้นจากนั้นจะประมวลผลโดยใช้ cscript ลบไฟล์หลังจากเรียกใช้งานทำให้ดูเหมือนว่าไฟล์นั้นถูกเรียกโดยพรอมต์คำสั่ง หากต้องการให้ดูเหมือนมากขึ้นเพียงใช้ @echo off หวังว่านี่จะช่วยได้!


1

Additionaly กับ(Windows ที่ไม่ใช่เจ้าของภาษา) ภายนอกปฏิบัติการมี

nircmd infobox "msg" "title"

หากคุณมีสิทธิ์เข้าถึงคอมไพเลอร์ VB6 ดังนั้นหนึ่งซับจะสร้างไฟล์ปฏิบัติการ 5.5k:

sub main
  msgbox command
end sub
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.