CMDからMsgboxを直接表示する方法


16

CMDを使用してユーザーにメッセージを表示したい。私が知っている方法は、.vbs(VBScript)ファイルを作成し、次のようにCMDから実行することです。

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

start File.vbs

しかし、私がやりたいのは、CMDから直接、ファイルを作成せずにメッセージを表示することです。コマンドを使用して、CMDからVBScriptsを直接実行している可能性があります。


ルックアップするmsgコマンドを。WindowsのHomeエディションを実行している場合はそれがないかもしれませんが、Proインストールからmsg.exeをコピーして貼り付けるだけで追加できます。
wysiwyg

方法があれば、Windows 10のすべてのバージョンで、もう少し「普遍的」なものにしたいと思います。
Bita

常にPowerShellもあります。Microsoftがcmdプロンプトの削除への移行を明確に開始しているにもかかわらず、見過ごされがちです。
Appleoddity 2017

回答:


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)が発生しました。
Jason

15

@wysiwygで提案されているように、WindowsのPro / Businessバージョン*では、Msgコマンドを探しています。すべての最新バージョンのWindows(少なくともXPまでのバージョン)で使用できます。現在ログオンしているユーザーにメッセージを表示するには、次のコマンドを実行します。

msg %username% Your message here

結果は次のようになります。 ここに画像の説明を入力してください

このコマンドに関する1つの考慮事項は、タイトルバーのテキストをカスタマイズできないことです。

TechNetで Msgの詳細を確認できます。


* Homeを含む Windowsのすべてのエディションで機能するソリューションが必要な場合、私の意見では、すでに知っているVBScriptメソッドがこの問題の最も簡単なソリューションです。Windowsのすべての最新バージョンとエディションでデフォルト設定で動作し、使いやすいです。


1
完全に真実ではありません。ウィンドウズが出て以来、DPSメッセージボックスコマンドがありました。悪用の可能性があると考えられていたため、Windows 7または8では削除されたと思います。
Keltari、2018年

2

今日はこれに似たものが必要でした。私はVBScript / Powershellのファンではないので、好きな外部依存関係ソリューションを見つけることができなかったので、先に進んで1つ作成しました。

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

生成されるメッセージボックスは、現在のコンソールウィンドウにモーダルです。つまり、ユーザーはダイアログを閉じるまで何もできません。また、MessageBox()呼び出しからの戻りコードが呼び出し元に返されるため、スクリプトはどのボタンが押された場合でも反応できます。そしてもちろん、MessageBox()Win32 APIのすべてのオプションをサポートしています。

80KBの実行可能ファイルをミックスに追加しても、すべての人のお茶になるとは限りません。ただし、VC ++ランタイムに対して静的にリンクされ、Unicodeをサポートしています。これにより、ファイルの機能が最小限であるという理由でファイルが非常に大きい理由が説明されます。また、コマンドラインから改行を簡単に渡して複数行のメッセージを表示できないという小さな問題があります。マイナーな利点として、これまでに提示された他のどのソリューションよりも短い時計時間でダイアログが表示されます。

もちろん、ファイルサイズが問題ではなく、ダイアログがあまりにも「目の前」のユーザーエクスペリエンスを作成したり、ユーザーの操作を必要としない場合は、この気の利いたプロジェクトにも遭遇しました。

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

IUserNotificationを使用して、画面のステータス通知領域にポップアップバルーンを表示します。不利な点は、Notifu実行可能ファイルが240KBほど実行されないことです。COMが不必要な肥大化を引き起こし、その機能のためのシンプルで軽量なAPIがあったことを願って別の残念な例を残しました。

クロスプラットフォームの何かには、天才があります。これは主にLinux用ですが、MacとWindowsのポートもあります。Windowsのzenityのポートは、サイズが1MBを超えています。GTKはかなり肥大化しているからです。


Windowsのネイティブバージョンがすでに存在するuser32 / comctl DLLを取得するだけで、すべてのgtkを内部で出荷する必要があるからではありませんか?
user1686

え?質問を明確にしてください。
CubicleSoft 2018

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を使用して実行します。実行後にファイルを削除し、cmdプロンプトによって呼び出されたように見せます。それをもっと見栄えよくするには、@ echo offを使用します。これが役に立てば幸い!


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.