VBScriptやKiXtart、またはその他の外部スクリプト/プログラミング言語を使用せずに、バッチスクリプトでポップアップメッセージを作成する方法を知る必要があります。私はこれについて全く手がかりがありません...出発点さえありませんでした。認識してNET SEND
いますが、現在の環境ではメッセンジャーサービスが無効になっています。
11 に答える
msg * "Enter Your Message"
これは役に立ちますか?
LittleBobbyTable の回答について - NET SEND は Vista または Windows 7 では動作しません。MSG.EXE に置き換えられました。
すべてのバージョンの Windows で機能する大雑把な解決策があります。大雑把なポップアップ メッセージは、キーが押されると閉じる新しい cmd.exe ウィンドウを開始することで送信できます。
start "" cmd /c "echo Hello world!&echo(&pause"
メッセージ ボックスが閉じられるまでスクリプトを一時停止する場合は、/WAIT オプションを追加できます。
start "" /wait cmd /c "echo Hello world!&echo(&pause"
CSCRIPT.EXE
or WSCRIPT.EXE
(Windows 95 以降、すべてのバージョンの Windows に存在していると思います) を次のように利用できます。
echo msgbox "Hey! Here is a message!" > %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
del %tmp%\tmp.vbs
また
echo msgbox "Hey! Here is a message!" > %tmp%\tmp.vbs
wscript %tmp%\tmp.vbs
del %tmp%\tmp.vbs
よりカスタマイズ可能なコマンドを選択することもできますPopUp
。この例では、タイムアウトする前に [OK] をクリックするための 10 秒のウィンドウが表示されます。
echo set WshShell = WScript.CreateObject("WScript.Shell") > %tmp%\tmp.vbs
echo WScript.Quit (WshShell.Popup( "You have 10 seconds to Click 'OK'." ,10 ,"Click OK", 0)) >> %tmp%\tmp.vbs
cscript /nologo %tmp%\tmp.vbs
if %errorlevel%==1 (
echo You Clicked OK
) else (
echo The Message timed out.
)
del %tmp%\tmp.vbs
上記のコンテキストでは、cscript
との両方wscript
が同じように動作します。バッチ ファイルから呼び出されると、botcscript
とwscript
は、スクリプトが終了するまでバッチ ファイルを一時停止し、その後、ファイルを続行できるようにします。
コマンド プロンプトから手動で呼び出すと、cscript
コマンド プロンプトが終了するまでコマンド プロンプトに制御が返されませんが、wscript
スクリプトの実行用に別のスレッドが作成され、スクリプトが終了する前でもコマンド プロンプトに制御が返されます。
このスレッドで説明されている他の方法では、メッセージがクリックされるのを待っている間にバッチ ファイルの実行が一時停止することはありません。あなたの選択は、あなたのニーズによって決まります。
注:この方法を使用すると、ユーザーへのさまざまなyes/no/cancel/abort/retryクエリに対応するために、複数のボタンとアイコンの構成を利用できます: https://technet.microsoft.com/en-us/library/ee156593.aspx
さらにいくつかの方法があります (すべての方法で、スクリプトは とは異なり、ボタンが押されるのを待ちますmsg.exe
)。
1)最もマニアックでハック - IEXPRESS を使用して、1 つのボタンでポップアップを作成する小さな exe を作成します (さらに 2 種類のポップアップ メッセージを作成できます)。XP 以降のすべてのウィンドウで動作します。
;@echo off
;setlocal
;set ppopup_executable=popupe.exe
;set "message2=%~1"
;
;del /q /f %tmp%\yes >nul 2>&1
;
;copy /y "%~f0" "%temp%\popup.sed" >nul 2>&1
;(echo(FinishMessage=%message2%)>>"%temp%\popup.sed";
;(echo(TargetName=%cd%\%ppopup_executable%)>>"%temp%\popup.sed";
;(echo(FriendlyName=%message1_title%)>>"%temp%\popup.sed"
;
;iexpress /n /q /m %temp%\popup.sed
;%ppopup_executable%
;rem del /q /f %ppopup_executable% >nul 2>&1
;pause
;endlocal
;exit /b 0
[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[SourceFiles]
SourceFiles0=C:\Windows\System32\
[SourceFiles0]
%FILE0%=
[Strings]
AppLaunched=subst.exe
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="subst.exe"
DisplayLicense=
InstallPrompt=
;
使用例 (スクリプトを として保存する場合expPopup.bat
):
call expPopup.bat "my Message"
2)を使用しMSHTA
ます。XP以降のすべてのWindowsマシンでも動作します(OPが「外部」言語を望んでいないにもかかわらず、ここのjsvascriptは最小化されています)。次のように保存する必要があります.bat
。
@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */
alert("Hello, world!");
または1行で:
mshta "about:<script>alert('Hello, world!');close()</script>"
また
mshta "javascript:alert('message');close()"
また
mshta.exe vbscript:Execute("msgbox ""message"",0,""title"":close")
3)ここにパラメータ化.bat/jscript
されたハイブリッドがあります (として保存する必要がありますbat
)。OP 要求にもかかわらず、再び jscript を使用しますが、これはバットであるため、心配することなくバット ファイルとして呼び出すことができます。 populae MSGBOX .WSHを使用しますが、上記の例のように MSHTA は使用しません。
@if (@x)==(@y) @end /***** jscript comment ******
@echo off
cscript //E:JScript //nologo "%~f0" "%~nx0" %*
exit /b 0
@if (@x)==(@y) @end ****** end comment *********/
var wshShell = WScript.CreateObject("WScript.Shell");
var args=WScript.Arguments;
var title=args.Item(0);
var timeout=-1;
var pressed_message="button pressed";
var timeout_message="timedout";
var message="";
function printHelp() {
WScript.Echo(title + "[-title Title] [-timeout m] [-tom \"Time-out message\"] [-pbm \"Pressed button message\"] [-message \"pop-up message\"]");
}
if (WScript.Arguments.Length==1){
runPopup();
WScript.Quit(0);
}
if (args.Item(1).toLowerCase() == "-help" || args.Item(1).toLowerCase() == "-h" ) {
printHelp();
WScript.Quit(0);
}
if (WScript.Arguments.Length % 2 == 0 ) {
WScript.Echo("Illegal arguments ");
printHelp();
WScript.Quit(1);
}
for (var arg = 1 ; arg<args.Length;arg=arg+2) {
if (args.Item(arg).toLowerCase() == "-title") {
title = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-timeout") {
timeout = parseInt(args.Item(arg+1));
if (isNaN(timeout)) {
timeout=-1;
}
}
if (args.Item(arg).toLowerCase() == "-tom") {
timeout_message = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-pbm") {
pressed_message = args.Item(arg+1);
}
if (args.Item(arg).toLowerCase() == "-message") {
message = args.Item(arg+1);
}
}
function runPopup(){
var btn = wshShell.Popup(message, timeout, title, 0x0 + 0x10);
switch(btn) {
// button pressed.
case 1:
WScript.Echo(pressed_message);
break;
// Timed out.
case -1:
WScript.Echo(timeout_message);
break;
}
}
runPopup();
使用例 (はいボタンを押すまで 10 秒間待機します):
jsPopup.bat -title CoolTitile -t 10 -tom "time out" -pbm "press the button please" -message "love and peace"
4)と 1 つの jscript.net/.bat
ハイブリッド (として保存する必要があります.bat
) .今回は、削除できる.NET
小さなファイルを使用してコンパイルします。.exe
@if (@X)==(@Y) @end /****** silent jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
::if exist "%~n0.exe" goto :skip_compilation
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
if exist "%%v\jsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxv\jsc.exe"
goto :break_loop
)
)
echo jsc.exe not found && exit /b 0
:break_loop
call %jsc% /nologo /out:"%~n0.exe" "%~f0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0
****** end of jscript comment ******/
import System;
import System.WIndows;
import System.Windows.Forms
var arguments:String[] = Environment.GetCommandLineArgs();
MessageBox.Show(arguments[1],arguments[0]);
使用例:
netPopUp.bat "Roger That"
5)最後に、ポップアップを作成する powershell を 1 回呼び出します (powershell がインストールされている場合は、コマンド ラインまたはバッチから呼び出すことができます)。
powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")
6)解決msg
策はすでに回答として投稿されていますが、使用するより良い方法は次のとおりです。
msg * /self /w "hello world"
/self
現在のユーザーにのみメッセージを送信するように msg に強制する、文書化されていないスイッチです。
あなたの最善の策は、 Rob van der Woude のサイトNET SEND
に記載されているとおりに使用することです。
それ以外の場合は、外部スクリプト プログラムを使用する必要があります。バッチ ファイルは、実際にはECHO
.
msg * message goes here
その方法は非常にシンプルで簡単で、私が信じているバッチファイルで機能するはずです。このメソッドの唯一の「欠点」は、一度に 1 つのメッセージしか表示できないことです。複数のメッセージがある場合は、コード内に配置した順序に応じて、次々に表示されます。また、バッチ ファイルに別のループまたは連続演算子があることを確認してください。そうしないと、自動的に閉じられ、このメッセージのみが表示されます。「静かな」バックグラウンド ループ オペレーターが必要な場合は、次の 1 つを使用できます。
pause >nul
それはそれを実行し続けるはずですが、ボタンが押されると閉じます。
また、実行時にすべてのコマンドを「静か」に保ち、コマンドが実行され、ファイルに入力されたことを表示しないようにするには、バッチ ファイルの先頭に次の行を追加します。
@echo off
これらすべてのヒントがお役に立てば幸いです。