سؤال

هل هناك طريقة لعرض مربع رسالة من ملف دفعي (يشبه كيف xmessage يمكن استخدامها من البرامج النصية باش في لينكس)؟

هل كانت مفيدة؟

المحلول

أود أن أقوم بإجراء ملف VBScript بسيط للغاية واتصل به باستخدام CScript لتحليل معلمات سطر الأوامر.

شيء مثل ما يلي المحفوظة في MessageBox.vbs:

Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox messageText

الذي ستدعو به:

cscript MessageBox.vbs "This will be shown in a popup."

MsgBox المرجعي إذا كنت مهتما بالذهاب إلى هذا الطريق.

نصائح أخرى

بادئ ذي بدء، لا علاقة لدى DOS معها، وربما تريد حل سطر أوامر Windows (مرة أخرى: لا DOS، نوافذ نقية، ليست نافذة، ولكن وحدة تحكم).

يمكنك إما استخدام طريقة VBScript التي توفرها BOFLYNN أو يمكنك استخدام سوء الاستخدام net send أو msg. net send يعمل فقط على الإصدارات الأقدم من Windows:

net send localhost Some message to display

هذا يعتمد أيضا على خدمة Messenger لتشغيلها، رغم ذلك.

للحصول على إصدارات أحدث (XP و ONWARD، على ما يبدو):

msg "%username%" Some message to display

تجدر الإشارة إلى أنه أرسل مربع رسالة باستخدام msg.exe سوف تستمر فقط لمدة 60 ثانية. ومع ذلك، يمكن أن يتأرجح مع /time:xx مفتاح كهربائي.

قد تعرض فلاش صغير، ولكن لا توجد ملفات TEMP مطلوبة. يجب أن تعمل طوال الطريق إلى مكان ما في عصر IE5 (IIRC).

mshta javascript:alert("Message\n\nMultiple\nLines\ntoo!");close();

لا تنسى الهروب بين قوسيناتك إذا كنت تستخدم if:

if 1 == 1 (
   mshta javascript:alert^("1 is equal to 1, amazing."^);close^(^);
)

هذا سوف ينبثق نافذة موجه الأوامر الأخرى:

START CMD /C "ECHO My Popup Message && PAUSE"

يحاول :

Msg * "insert your message here" 

إذا كنت تستخدم Command.com ل Windows XP، فسوف يفتح هذا مربع رسالة.

فتح نافذة CMD جديدة ليست تماما ما كنت تطلبه، أجمع. يمكنك أيضا استخدام VBScript., واستخدام هذا مع ملف .bat الخاص بك. سوف تفتحها من ملف الخفافيش مع هذا الأمر:

cd C:\"location of vbscript"

ما هو تغيير هذا دليل Command.com سيبحث عن الملفات من، ثم في السطر التالي:

"insert name of your vbscript here".vbs

ثم تنشئ جديد المفكرة وثيقة، اكتب

<script type="text/vbscript">
    MsgBox "your text here"
</script>

يمكنك بعد ذلك حفظ هذا كملف .vbs (عن طريق وضع ".vbs" في نهاية اسم الملف)، احفظ ك "كافة الملفات" في المربع المنسدل أسفل اسم الملف (لذلك لا يتم حفظه باسم .txt )، ثم انقر فوق حفظ!

بهذه الطريقة سيتم إنشاء ملف الدفعات الخاص بك برنامج نصي VBS وإظهار نافذة منبثقة. بعد تشغيله، سيقوم ملف الدفعات بحذف الملف المتوسط.

ميزة استخدام MSGBOX هي أنه قابل للتخصيص حقا (تغيير العنوان والأيقونة وما إلى ذلك) بينما Msg.exe ليس بنفس القدر.

echo MSGBOX "YOUR MESSAGE" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q

عدد قليل من الطرق.

1) يجري الكلام والقلق - يستخدم iExpress لإنشاء EXE صغير سيؤدي إلى إنشاء نافذبا مع زر واحد (يمكن أن تخلق نوعين آخرين من الرسائل المنبثقة). يعمل على كل نوافذ من XP وما فوق:

;@echo off
;setlocal

;set ppopup_executable=popupe.exe
;set "message2=click OK to continue"
;
;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=

2) استخدام MSHTA. وبعد يعمل أيضا على كل جهاز ويندوز من XP وما فوق (على الرغم من أن OP لا تريد "لغات" خارجية "يتم تقليل JavaScript هنا). يجب أن ينقذ كما .bat:

@if (true == false) @end /*!
@echo off
mshta "about:<script src='file://%~f0'></script><script>close()</script>" %*
goto :EOF */

alert("Hello, world!");

أو في خط واحد:

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). يستخدم مرة أخرى جافا سكريبت على الرغم من طلب المرجع ولكن كما هو الحافظة يمكن أن يسمى كملف مضرب دون قلق. ويستخدم ذلك يظهر فجأة مما يسمح بتحكم أكثر قليلا من أكثر شعبية 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="timed out";
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();

4) و واحد 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]);

5) وفي النهاية مكالمة واحدة إلى PowerShell التي تنشئ منبثقة (يمكن استدعاء من سطر الأوامر أو من الدفعة إذا تم تثبيت PowerShell):

powershell [Reflection.Assembly]::LoadWithPartialName("""System.Windows.Forms""");[Windows.Forms.MessageBox]::show("""Hello World""", """My PopUp Message Box""")

6) ونهج دبلهام ينظر هنا

start "" cmd /c "echo(&echo(&echo              Hello world!     &echo(&pause>nul"

7) للحصول على إشعارات صينية النظام يمكنك المحاولة هذه:

call SystemTrayNotification.bat  -tooltip warning -time 3000 -title "Woow" -text "Boom" -icon question

إليك متغير PowerShell الذي لا يحتاج إلى تحسين التجمعات قبل إنشاء النافذة، ومع ذلك، فإنه يعمل بشكل أبطأ بشكل ملحوظ (~ + 50٪) من أمر PowerShell MessageBox المنشور هنا بواسطةnpocmaka:

powershell (New-Object -ComObject Wscript.Shell).Popup("""Operation Completed""",0,"""Done""",0x0)

يمكنك تغيير المعلمة الأخيرة من "0x0" إلى قيمة أدناه لعرض الرموز في مربع الحوار (انظر طريقة المنبثقة لمزيد من المرجع):

        Stop 0x10 توقف
        Question Mark 0x20 مسألة مارك
        Exclamation Mark 0x30 تعجب علامة
        Information Mark معلومات معلومات 0x40

تتكيف من مقالة تقنية Microsoft Powertip: استخدم PowerShell لعرض النافذة المنبثقة.

echo X=MsgBox("Message Description",0+16,"Title") >msg.vbs

، يمكنك كتابة أي أرقام من 0،1،2،3،4 بدلا من 0 (قبل رمز "+") وهنا هو معنى كل رقم:

0 = Ok Button  
1 = Ok/Cancel Button  
2 = Abort/Retry/Ignore button  
3 = Yes/No/Cancel  
4 = Yes/No  

، يمكنك كتابة أي أرقام من 16،32،48،64 بدلا من 16 (بعد رمز "+") وهنا معنى كل رقم:

16 – Critical Icon  
32 – Warning Icon  
48 – Warning Message Icon   
64 – Information Icon  

MSG * "أدخل رسالتك هنا"

يعمل بشكل جيد، فقط حفظ كملف .bat في المفكرة أو تأكد من تعيين التنسيق على "كافة الملفات"

من أجل القيام بذلك، تحتاج إلى الحصول على برنامج صغير يعرض صندوق رسالة وتشغيل ذلك من ملف الدفعات الخاص بك.

يمكنك فتح نافذة وحدة تحكم تعرض موجه على الرغم من ذلك، ولكن الحصول على مربع رسالة واجهة المستخدم الرسومية باستخدام cmd.exe والأصدقاء فقط غير ممكن، AFAIK.

يمكنني استخدام أداة مساعدة اسمها msgbox.exe من هنا:http://www.paulsadowski.com/wsh/cmdprogs.htm.

يمكنك استخدام المريلة. وبعد يسمح المربل بتنفيذ مربعات الحوار في سطر الأوامر وبرامج نصوص Shell. يمكن أيضا العثور على مزيد من المعلومات ويكيبيديا.

إنه منصات عرضية: يمكن العثور على برنامج Windows Installer ل Windows هنا.

msg * /time:0 /w Hello everybody!

تنظر هذه الرسالة إلى الأبد حتى يتم النقر فوق "موافق" (تستغرق دقيقة واحدة فقط بشكل افتراضي) ويعمل بشكل جيد في Windows 8.1

بعد إجابة Fowl's، يمكنك تحسينه مع مهلة لا تظهر فقط لمدة 10 ثوان باستخدام ما يلي:

mshta "javascript:var sh=new ActiveXObject( 'WScript.Shell' ); sh.Popup( 'Message!', 10, 'Title!', 64 );close()"

يرى هنا لمزيد من التفاصيل.

يمكنك استدعاء وظيفة DLL من User32.dll أعتقد شيئا مثل

userdll32.exe user32.dll، messageBox (0، "نص"، "titletext"، {أعلام إضافية لأجل top messageBox})

كتابته من هاتفي، لا تحكم علي ... وإلا أود ربط الأعلام الإضافية.

msg * /server:127.0.0.1 اكتب رسالتك هنا

هذه تطبيق يمكن أن تفعل ذلك، إذا قمت بتحويل (التفاف) ملفات الدفعات الخاصة بك إلى الملفات القابلة للتنفيذ.


  1. رسالة بسيطة

    %extd% /messagebox Title Text
    

  1. خطأ رسالة خطأ

    %extd% /messagebox  Error "Error message" 16
    
  2. إلغاء محاولة مرة أخرى messageBox

    %extd% /messagebox Title "Try again or Cancel" 5
    

4) "لا تسألني أبدا مرة أخرى"

%extd% /messageboxcheck Title Message 0 {73E8105A-7AD2-4335-B694-94F837A38E79}

خيار أفضل

set my_message=Hello world&& start cmd /c "@echo off & mode con cols=15 lines=2 & echo %my_message% & pause>nul"


وصف:
lines= كمية الخطوط، بالإضافة إلى 1
cols= كمية الأحرف في الرسالة، بالإضافة إلى 3 (ومع ذلك، يجب أن يكون الحد الأدنى 15)

محسوب تلقائي cols الإصدار:

set my_message=Hello world&& (echo %my_message%>EMPTY_FILE123 && FOR %? IN (EMPTY_FILE123 ) DO SET strlength=%~z? && del EMPTY_FILE123 ) && start cmd /c "@echo off && mode con lines=2 cols=%strlength% && echo %my_message% && pause>nul"

لا يحتاج فقط إلى المنبثقة عندما داخل VM، لذلك من الناحية الفنية، يجب أن يكون هناك بعض الكود مثل:

if %machine_type% == virtual_machine then
   echo message box code
else
   continue normal installation code
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top