Cách hiển thị Msgbox trực tiếp từ CMD


16

Tôi muốn hiển thị một thông báo cho người dùng bằng cách sử dụng CMD. Cách tôi biết để làm như vậy là bằng cách tạo tệp .vbs (VBScript) và thực thi nó từ CMD như thế này:

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

start File.vbs

Nhưng điều tôi muốn làm là hiển thị thông báo mà không cần tạo bất kỳ tập tin nào, trực tiếp từ CMD. Có thể bằng cách sử dụng một lệnh để chạy VBScripts ngay từ CMD.


Tra cứu msglệnh. Bạn có thể không có nó nếu bạn đang chạy phiên bản Home của Windows, nhưng bạn có thể thêm nó bằng cách chỉ sao chép và dán tệp tin.exe.exe từ bản cài đặt Pro.
wysiwyg

Tôi sẽ làm một cái gì đó "phổ quát" hơn một chút, cho tất cả các phiên bản Windows 10 nếu có một cách.
Bita

Luôn luôn có quyền hạn. Thường bị bỏ qua, mặc dù Microsoft rõ ràng đã bắt đầu chuyển đổi để loại bỏ dấu nhắc cmd.
Appleoddity

Câu trả lời:


9

Như những người khác đã nói không có cách nào để làm điều này hoàn toàn với cmd nhưng mặc dù đó là tiêu đề của câu hỏi, đối với tôi, phần không có tệp quan trọng hơn đối với bạn và trong một số trường hợp nhất định, điều này có thể xảy ra.

Với powershell, có thể chạy mã mà không cần bất kỳ mã nào như thế này:

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

VBS không cho phép thực thi mã trực tiếp thông qua cscript hoặc wscript nhưng mshta thì có. Bạn có thể sử dụng nó như thế này (nếu bạn cần nhiều dòng sử dụng ':' làm dấu phân cách):

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

Vì nó là dựa trên nó có thể bị ảnh hưởng bởi một số hạn chế gpo, vì vậy nếu bạn có quyền lựa chọn thì có lẽ là đặt cược an toàn hơn


Ngoài cảnh báo trên mshta, một số phần mềm chống vi-rút coi đây là một quá trình không mong muốn. Trong công việc, nỗ lực của tôi để chạy nó đã dẫn đến một sản phẩm doanh nghiệp quá nhiệt tình (SentinelOne) để cách ly toàn bộ máy của tôi và xóa nó khỏi mạng.
Jason

15

Theo đề xuất của @wysiwyg, trên các phiên bản Pro / Business * của Windows bạn đang tìm kiếm Msglệnh. Nó có sẵn trong tất cả các phiên bản Windows hiện đại (ít nhất là từ XP). Để hiển thị thông báo cho người dùng hiện đang đăng nhập, hãy chạy như sau:

msg %username% Your message here

Kết quả trông như thế này: nhập mô tả hình ảnh ở đây

Một xem xét với lệnh này là bạn không thể tùy chỉnh văn bản Titlebar.

Bạn có thể tìm hiểu thêm về Msg trên TechNet .


* Nếu bạn cần một giải pháp hoạt động trên tất cả các phiên bản Windows, bao gồm cả Home , theo tôi, phương pháp VBScript mà bạn đã biết là giải pháp đơn giản nhất cho vấn đề này. Nó hoạt động trên tất cả các phiên bản và phiên bản hiện đại của Windows trong cấu hình mặc định của chúng và rất dễ sử dụng.


1
Không hoàn toàn đúng. Có một lệnh hộp tin nhắn dps kể từ khi cửa sổ xuất hiện. Tôi tin rằng nó đã bị xóa trong Windows 7 hoặc 8 vì nó được xem là một khai thác có thể.
Keltari

2

Tôi cần một cái gì đó tương tự như ngày hôm nay. Vì tôi không thể tìm thấy giải pháp phụ thuộc bên ngoài mà tôi thích vì tôi không thực sự là người hâm mộ VBScript / Powershell, tôi đã tiếp tục và viết một:

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

Các hộp thông báo mà nó tạo ra là phương thức cho cửa sổ giao diện điều khiển hiện tại. Đó là, người dùng không thể làm bất cứ điều gì cho đến khi họ đóng hộp thoại. Ngoài ra, mã trả về từ MessageBox()cuộc gọi được trả lại cho người gọi để tập lệnh có thể phản ứng với bất kỳ nút nào được nhấn. Và, tất nhiên, nó hỗ trợ đầy đủ các tùy chọn cho MessageBox()API Win32.

Thêm một 80KB thực thi vào hỗn hợp có thể không phải là tách trà của mọi người. Nó được liên kết tĩnh với thời gian chạy VC ++ và hỗ trợ Unicode, điều này giải thích tại sao tệp quá lớn do tính chất tối giản của những gì nó làm. Và có một vấn đề nhỏ là không thể dễ dàng chuyển các dòng mới từ dòng lệnh để hiển thị các thông điệp đa dòng. Mặt khác, nó hiển thị hộp thoại trong thời gian ít hơn so với bất kỳ giải pháp nào khác được trình bày cho đến nay.

Tất nhiên, nếu kích thước tệp không thành vấn đề và các hộp thoại tạo ra trải nghiệm người dùng "trong khuôn mặt của bạn" và / hoặc không yêu cầu tương tác người dùng, tôi cũng đã chạy vào dự án tiện lợi này:

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

Hiển thị một bong bóng bật lên trong khu vực thông báo trạng thái của màn hình bằng IUserNotification . Nhược điểm là thực thi Notifu chỉ chạy 240KB. Một ví dụ đáng tiếc khác là COM tạo ra sự phình to không cần thiết và khiến tôi ước rằng có một API đơn giản, nhẹ cho tính năng này.

Đối với một cái gì đó đa nền tảng, có sự thoải mái. Nó chủ yếu dành cho Linux nhưng cũng có cổng Mac và Windows. Cổng tiện ích Windows có kích thước hơn 1MB bởi vì, tốt, GTK khá cồng kềnh.


Không phải vì nó phải gửi tất cả gtk trong nội bộ trong khi các phiên bản Windows gốc chỉ nhận các DLL người dùng32 / comctl đã có sẵn?
dùng1686

Huh? Hãy làm rõ câu hỏi.
CubicleSoft

1

Tôi có một cách để làm điều này với cmd, nhưng về cơ bản nó bao gồm một tệp, nhưng tệp bị xóa ngay lập tức sau khi vbs được thực thi. Vì vậy, nó không thực sự. Bạn có thể làm :

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

Loại + Biểu tượng + Hành động chỉ là vbs cơ bản, để tham khảo, ở đây. https://therevisionist.org/wp-content/uploads/2016/03/vbscript_msgbox_chart-e1458059002411.jpg?x47750 Mã mà tôi đã hiển thị cho bạn tạo một tệp có mã VBS trong đó, sau đó nó thực thi nó bằng cscript, sau đó nó thực thi nó xóa tập tin sau khi nó được thực thi làm cho nó trông giống như nó đã được triệu tập bởi dấu nhắc cmd. Để làm cho nó trông giống như vậy nhiều hơn, chỉ cần sử dụng @echo tắt. Hy vọng điều này sẽ giúp!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.