Îíëàéí áèáëèîòåêà PLAM.RU


  • Âûâîä íà ýêðàí òåêñòîâûõ ñòðîê
  • Ìåòîä Echo îáúåêòà WScript
  • Ìåòîäû Write è WriteLine îáúåêòà WScript.StdOut
  • Ôóíêöèÿ MsgBox ÿçûêà VBScript
  • Ìåòîä Popup îáúåêòà WshShell
  • Ââîä ñòðîê òåêñòà
  • Ââîä ñòðîê â êîíñîëüíîì ðåæèìå
  • Ââîä ñòðîê â ãðàôè÷åñêîì ðåæèìå 
  • Ïîëó÷åíèå ñâîéñòâ WSH è çàïóùåííîãî ñöåíàðèÿ
  • Ðàáîòà ñ ïàðàìåòðàìè êîìàíäíîé ñòðîêè ñöåíàðèÿ
  • Âûõîä èç ñöåíàðèÿ ñ îïðåäåëåííûì êîäîì çàâåðøåíèÿ
  • Èñïîëüçîâàíèå âíåøíèõ îáúåêòîâ àâòîìàòèçàöèè (íà Microsoft Word)
  • Çàïóñê èç ñöåíàðèåâ âíåøíèõ ïðîãðàìì 
  • Çàïóñê ïðèëîæåíèé Windows
  • Ïåðåêëþ÷åíèå ìåæäó ïðèëîæåíèÿìè, èìèòàöèÿ íàæàòèé êëàâèø
  • Çàïóñê íåçàâèñèìûõ êîíñîëüíûõ ïðèëîæåíèé è êîìàíä DOS
  • Çàïóñê äî÷åðíèõ êîíñîëüíûõ ïðèëîæåíèé è êîìàíä DOS, èñïîëüçîâàíèå èõ âõîäíûõ è âûõîäíûõ ïîòîêîâ
  • Äîñòóï ê ñïåöèàëüíûì ïàïêàì Windows ÕÐ
  • Ñîçäàíèå ÿðëûêîâ â ñïåöèàëüíûõ ïàïêàõ
  • Ðàáîòà ñ ñèñòåìíûì ðååñòðîì Windows
  • Ðàáîòà ñ ðåñóðñàìè ëîêàëüíîé ñåòè
  • Îïðåäåëåíèå èìåí ðàáî÷åé ñòàíöèè, ïîëüçîâàòåëÿ è äîìåíà
  • Ïîëó÷åíèå ñïèñêà ïîäêëþ÷åííûõ ñåòåâûõ äèñêîâ è ïðèíòåðîâ
  • Ïîäêëþ÷åíèå è îòêëþ÷åíèå ñåòåâûõ äèñêîâ è ïðèíòåðîâ
  • Çàïóñê ñöåíàðèåâ íà óäàëåííûõ ìàøèíàõ. Êîíòðîëü çà õîäîì âûïîëíåíèÿ òàêèõ ñöåíàðèåâ
  • Ãëàâà 2

    Ïðèìåðû èñïîëüçîâàíèÿ  ñòàíäàðòíûõ îáúåêòîâ WSH (JScript è VBScript)

     ýòîé ãëàâå ìû íà ïðèìåðàõ ïîäðîáíî ðàññìîòðèì, êàê ñ ïîìîùüþ ñòàíäàðòíûõ îáúåêòîâ WSH 5.6, îïèñàíèå êîòîðûõ ïðèâåäåíî â ãëàâå 1, ìîæíî ðåøàòü íåêîòîðûå ïðàêòè÷åñêèå çàäà÷è, ñâÿçàííûå, â ÷àñòíîñòè, ñ âûâîäîì è ââîäîì òåêñòîâîé èíôîðìàöèè, çàïóñêîì äðóãèõ ïðèëîæåíèé (êàê íà ëîêàëüíîé, òàê è íà óäàëåííîé ìàøèíå), ñîçäàíèåì ÿðëûêîâ â ðàçëè÷íûõ ïàïêàõ, ðàáîòîé ñ ñèñòåìíûì ðååñòðîì è ëîêàëüíîé ñåòüþ. Ïðàêòè÷åñêè âñå ñöåíàðèè ïðèâåäåíû êàê íà ÿçûêå JScript, òàê è íà VBScript, è ñíàáæåíû ïîäðîáíûìè êîììåíòàðèÿìè.

    Âûâîä íà ýêðàí òåêñòîâûõ ñòðîê

    Ñôîðìèðîâàííûå â ñöåíàðèè ñòðîêè òåêñòà ìîæíî âûâîäèòü â ñòàíäàðòíûé âûõîäíîé ïîòîê (â êîíñîëüíîì ðåæèìå) èëè â ãðàôè÷åñêîå äèàëîãîâîå îêíî íåñêîëüêèìè ñïîñîáàìè:

    ? ñ ïîìîùüþ ìåòîäà

    Echo
    îáúåêòà
    WScript
    ;

    ? ñ ïîìîùüþ ìåòîäîâ

    Write
    è
    WriteLine
    îáúåêòà
    WScript.StdOut
    ;

    ? ñ ïîìîùüþ ôóíêöèè

    MsgBox
    ÿçûêà VBScript;

    ? ñ ïîìîùüþ ìåòîäà

    Popup
    îáúåêòà
    WshShell
    .

    Ìåòîä Echo îáúåêòà WScript

    Ïðèìåðû èñïîëüçîâàíèÿ ìåòîäà

    WScript.Echo
    â ñöåíàðèÿõ, íàïèñàííûõ íà ÿçûêàõ JScript è VBScript, ïðåäñòàâëåíû ñîîòâåòñòâåííî â ëèñòèíãàõ 2.1 è 2.2.

    Çàìå÷àíèå 

    Äëÿ êîððåêòíîãî îòîáðàæåíèÿ ñ ïîìîùüþ ìåòîäà Echo ñèìâîëîâ êèðèëëèöû, ýòè ñèìâîëû äîëæíû áûòü ïðåäñòàâëåíû â Windows-êîäèðîâêå (CP 1251).

    Ëèñòèíã 2.1. Âûâîä ñòðîê â Win-êîäèðîâêå ñ ïîìîùüþ ìåòîäà
    WScript.Echo
    (JScript)

    /*******************************************************************/

    /* Èìÿ: Echo1.js                                                   */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà WScript.Echo              */

    /*******************************************************************/

    //Ïå÷àòàåì ñòðîêó òåêñòà (êèðèëëèöà)

    WScript.Echo("Èñïîëüçîâàíèå ìåòîäà Echo (Win-êîäèðîâêà)");

    //Ïå÷àòàåì ñòðîêó òåêñòà è ðåçóëüòàò âû÷èñëåíèé

    WScript.Echo("Íàïðèìåð, 1+2=",1+2);

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.2. Âûâîä ñòðîê â Win-êîäèðîâêå ñ ïîìîùüþ ìåòîäà WScript.Echo (VBScript)

    '*******************************************************************

    ' Èìÿ: Echo1.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà WScript.Echo

    '*******************************************************************

    ' Ïå÷àòàåì ñòðîêó òåêñòà (êèðèëëèöà)

    WScript.Echo "Èñïîëüçîâàíèå ìåòîäà Echo (Win-êîäèðîâêà)"

    ' Ïå÷àòàåì ñòðîêó òåêñòà è ðåçóëüòàò âû÷èñëåíèé

    WScript.Echo "Íàïðèìåð, 1+2=",1+2

    '*************  Êîíåö *********************************************

    Åñëè ñöåíàðèé Echo1.js (Echo1.vbs) áûë çàïóùåí ñ ïîìîùüþ cscript.exe, òî ñòðîêè âûâîäÿòñÿ â êîìàíäíîå îêíî (ðèñ. 2.1).

    Åñëè æå ýòîò ñöåíàðèé âûïîëíÿëñÿ ñ ïîìîùüþ wscript.exe, òî ñòðîêè ïî î÷åðåäè âûâîäÿòñÿ â äèàëîãîâûå îêíà ñ åäèíñòâåííîé êíîïêîé OK (ðèñ. 2.2).

    ×àñòî áûâàåò íåîáõîäèìî âûâîäèòü â äèàëîãîâîå îêíî íå ïî îäíîé ñòðîêå òåêñòà, à ñðàçó íåñêîëüêî òàêèõ ñòðîê (ðèñ. 2.3). Äëÿ ýòîãî íóæíî ôîðìèðîâàòü ñòðîêè, ñîäåðæàùèå ñèìâîëû ïåðåâîäà ñòðîêè: escape-ïîñëåäîâàòåëüíîñòü "

    \n
    " äëÿ JScript è ïðåäîïðåäåëåííàÿ èìåíîâàííàÿ êîíñòàíòà
    vbCrLf
    äëÿ VBScript (ñîîòâåòñòâóþùèå ïðèìåðû ñöåíàðèåâ ïðèâåäåíû â ëèñòèíãàõ 2.3 è 2.4).  

    Ðèñ. 2.1. Ðåçóëüòàò âûïîëíåíèÿ Echo1.js ñ ïîìîùüþ cscript.exe


    Ðèñ. 2.2. Ðåçóëüòàò âûïîëíåíèÿ Echo1.js ñ ïîìîùüþ wscript.exe


    Ðèñ. 2.3. Äèàëîãîâîå îêíî ñ íåñêîëüêèìè ñòðîêàìè òåêñòà


    Ëèñòèíã 2.3. Âûâîä â äèàëîãîâîå îêíî íåñêîëüêèõ ñòðîê (JScript)

    /*******************************************************************/

    /* Èìÿ: Echo2.js                                                   */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Âûâîä ñðàçó íåñêîëüêèõ ñòðîê (WScript.Echo)           */

    /*******************************************************************/

    var s; //Îáúÿâëÿåì ïåðåìåííóþ

    s="Ïðèìåð\nâûâîäà\níåñêîëüêèõ\nñòðîê"; //Ôîðìèðóåì ñòðîêè

    WScript.Echo(s); //Ïå÷àòàåì ñòðîêè

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.4. Âûâîä â äèàëîãîâîå îêíî íåñêîëüêèõ ñòðîê (VBScript)

    '*******************************************************************

    ' Èìÿ: Echo2.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Âûâîä ñðàçó íåñêîëüêèõ ñòðîê (WScript.Echo)

    '*******************************************************************

    Option Explicit

    Dim s  ' Îáúÿâëÿåì ïåðåìåííóþ

    ' Ôîðìèðóåì ñòðîêè

    s="Ïðèìåð"&vbCrLf&"âûâîäà"&vbCrLf&"íåñêîëüêèõ"&vbCrLf&"ñòðîê"

    WScript.Echo s  ' Ïå÷àòàåì ñòðîêè

    '*************  Êîíåö *********************************************
     

    Ìåòîäû Write è WriteLine îáúåêòà WScript.StdOut

    Äëÿ âûâîäà ñòðîê â ñöåíàðèÿõ, âûïîëíÿþùèõñÿ â êîíñîëüíîì ðåæèìå, ìîæíî èñïîëüçîâàòü ñòàíäàðòíûé âûõîäíîé ïîòîê

    WScript.StdOut
    (ëèñòèíãè 2.5 è 2.6). Íàïîìíèì, ÷òî çàïóñêàòü ñöåíàðèé, îáðàùàþùèéñÿ ê ïîòîêó
    StdOut
    , ìîæíî òîëüêî â êîíñîëüíîì ðåæèìå ñ ïîìîùüþ cscript.exe. Åñëè æå ïîïðîáîâàòü âûïîëíèòü, íàïðèìåð, ñöåíàðèé StdOut1.js ñ ïîìîùüþ wscript.exe, òî ïðîèçîéäåò îøèáêà (ðèñ. 2.4).

    Ðèñ. 2.4. Îøèáêà, âîçíèêàþùàÿ ïðè îáðàùåíèè ê

    StdOut
    â ãðàôè÷åñêîì ðåæèìå


    Ëèñòèíã 2.5. Âûâîä ñòðîê â ñòàíäàðòíûé âûõîäíîé ïîòîê (JScript)

    /*******************************************************************/

    /* Èìÿ: StdOut1.js                                                 */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäîâ StdOut.Write è           */

    /*           StdOut.WriteLine                                      */

    /*******************************************************************/

    var n;  //Îáúÿâëÿåì ïåðåìåííóþ

    n=1+2;

    //Ïå÷àòü áåç ïåðåâîäà ñòðîêè

    WScript.StdOut.Write("Èñïîëüçîâàíèå ìåòîäà ");

    //Âûâîäèì ñòðîêó ñ òåêóùåé ïîçèöèè êóðñîðà

    WScript.StdOut.WriteLine("StdOut.WriteLine");

    //Ïå÷àòàåì ñòðîêó è çíà÷åíèå ïåðåìåííîé

    WScript.StdOut.WriteLine("Íàïðèìåð, 1+2="+n);

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.6. Âûâîä ñòðîê â ñòàíäàðòíûé âûõîäíîé ïîòîê (VBScript)

    '*******************************************************************

    ' Èìÿ: StdOut1.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäîâ StdOut.Write è StdOut.WriteLine

    '*******************************************************************

    Option Explicit

    Dim n   ' Îáúÿâëÿåì ïåðåìåííóþ

    n=1+2

    ' Ïå÷àòü áåç ïåðåâîäà ñòðîêè

    WScript.StdOut.Write "Èñïîëüçîâàíèå ìåòîäà "

    ' Âûâîäèì ñòðîêó ñ òåêóùåé ïîçèöèè êóðñîðà

    WScript.StdOut.WriteLine "StdOut.WriteLine"

    Çàìå÷àíèå

    Â Windows ÕÐ ñèìâîëû êèðèëëèöû, ïîñûëàåìûå èç ñöåíàðèÿ â ñòàíäàðòíûé âûõîäíîé ïîòîê, äîëæíû áûòü ïðåäñòàâëåíû â Windows-êîäèðîâêå (CP 1251). Â ïðåäûäóùèõ âåðñèÿõ Windows äëÿ êîððåêòíîãî îòîáðàæåíèÿ íà ýêðàíå ñèìâîëû êèðèëëèöû ïðè èñïîëüçîâàíèè ïîòîêà

    WScript.StdOut
    äîëæíû áûòü â DOS-êîäèðîâêå (OEM 866).

    Êàê è ïðè èñïîëüçîâàíèè ìåòîäà

    WScript.Echo
    , â êà÷åñòâå ïàðàìåòðà ìåòîäà
    WriteLine
    ìîæíî óêàçûâàòü ñòðîêè, ñîäåðæàùèå ñèìâîëû ïåðåâîäà ñòðîêè (ëèñòèíãè 2.7 è 2.8).

    Ëèñòèíã 2.7. Âûâîä â
    StdOut
    ñðàçó íåñêîëüêèõ ñòðîê (JScript)

    /*******************************************************************/

    /* Èìÿ: StdOu2.js                                                 */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Âûâîä ñðàçó íåñêîëüêèõ ñòðîê (StdOut.WriteLine)       */

    /*******************************************************************/

    var s;  //Îáúÿâëÿåì ïåðåìåííóþ

    s="Ïðèìåð\nâûâîäà\níåñêîëüêèõ\nñòðîê"; //Ôîðìèðóåì ñòðîêè

    WScript.StdOut.WriteLine(s);  //Âûâîäèì ñòðîêè

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.8. Âûâîä â
    StdOut
    ñðàçó íåñêîëüêèõ ñòðîê (VBScript)

    '*******************************************************************

    ' Èìÿ: StdOut2.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Âûâîä ñðàçó íåñêîëüêèõ ñòðîê (StdOut.WriteLine)

    '*******************************************************************

    Option Explicit

    Dim s  ' Îáúÿâëÿåì ïåðåìåííóþ

    ' Ôîðìèðóåì ñòðîêè

    s="Ïðèìåð"&vbCrLf&"âûâîäà"&vbCrLf&"íåñêîëüêèõ"&vbCrLf&"ñòðîê"

    WScript.StdOut.WriteLine s  ' Âûâîäèì ñòðîêè

    '*************  Êîíåö *********************************************

    Äëÿ ñîçäàíèÿ áîëåå êîìïàêòíîãî òåêñòà ñöåíàðèÿ ìîæíî ñðàçó ñîõðàíèòü ññûëêó íà ñòàíäàðòíûé âûõîäíîé ïîòîê

    WScript.StdOut
    â îòäåëüíóþ ïåðåìåííóþ è çàòåì ïðè âûçîâå ìåòîäîâ
    Write
    è
    WriteLine
    èñïîëüçîâàòü ýòó ïåðåìåííóþ (ëèñòèíãè 2.9 è 2.10).

    Ëèñòèír 2.9. Ñîõðàíåíèå ññûëêè íà ïîòîê
    StdOut
    â ïåðåìåííîé (JScript)

    /*******************************************************************/

    /* Èìÿ: StdOut3.js                                                 */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà StdOut.WriteLine          */

    /*******************************************************************/

    var n,StdOut;  //Îáúÿâëÿåì ïåðåìåííûå

    n=1+2;

    StdOut=WScript.StdOut;  //Ñîõðàíÿåì ññûëêó íà StdOut â ïåðåìåííîé

    //Âûâîäèì ñòðîêè â StdOut

    StdOut.WriteLine("Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà StdOut.WriteLine() ...");

    StdOut.WriteLine("1+2="+n); 

    /*************  Êîíåö *********************************************/

    Ëèñòèír 2.10. Ñîõðàíåíèå ññûëêè íà ïîòîê StdOut â ïåðåìåííîé (VBScript)

    '*******************************************************************

    ' Èìÿ: StdOut3.vbs

    ' ßçûê: JScript

    ' Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà StdOut.WriteLine

    '*******************************************************************

    Option Explicit

    Dim n,StdOut  ' Îáúÿâëÿåì ïåðåìåííûå

    n=1+2

    Set StdOut=WScript.StdOut  ' Ñîõðàíÿåì ññûëêó íà StdOut â ïåðåìåííîé

    ' Âûâîäèì ñòðîêè â StdOut

    StdOut.WriteLine "Ýòî ïðèìåð èñïîëüçîâàíèÿ ìåòîäà StdOut.WriteLine() ..."

    StdOut.WriteLine "1+2=" & n

    '*************  Êîíåö *********************************************

    Ôóíêöèÿ MsgBox ÿçûêà VBScript

    Â ÿçûêå VBScript ñóùåñòâóåò ñïåöèàëüíàÿ ôóíêöèÿ

    MsgBox
    , ñ ïîìîùüþ êîòîðîé ìîæíî âûâîäèòü èíôîðìàöèþ â äèàëîãîâîå îêíî ñ íåñêîëüêèìè êíîïêàìè; òàêæå â ýòîì îêíå ìîæíî çàäàâàòü çàãîëîâîê è çíà÷îê (ðèñ. 2.5).

    Ðèñ. 2.5. Äèàëîãîâîå îêíî, ñîçäàííîå ñ ïîìîùüþ ôóíêöèè

    MsgBox


    Ïðèìåð ñöåíàðèÿ, ñîçäàþùåãî òàêîå äèàëîãîâîå îêíî, ïðèâåäåí â ëèñòèíãå 2.11.

    Çàìå÷àíèå

    Â ÿçûêå JScript àíàëîãà ôóíêöèè

    MsgBox
    íåò.

    Ëèñòèíã 2.11. Ñîçäàíèå äèàëîãîâîãî îêíà ñ ïîìîùüþ ôóíêöèè MsgBox (VBScript)

    '*******************************************************************

    ' Èìÿ: MsgBox.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè MsgBox

    '*******************************************************************

    Dim Res,Text,Title  ' Îáúÿâëÿåì ïåðåìåííûå

    Text="Ïðèìåð âûâîäà ñòðîê â äèàëîãîâîå" & vbCrLf & " îêíî VBScript"

    Title="Çàãîëîâîê"

    ' Âûâîäèì äèàëîãîâîå îêíî íà ýêðàí

    Res=MsgBox(Text,vbOkCancel+vbInformation+vbDefaultButton2,Title)

    ' Îïðåäåëÿåì, êàêàÿ èç êíîïîê áûëà íàæàòà â äèàëîãîâîì îêíå

    If Res=vbOk Then

     MsgBox "Íàæàòà êíîïêà OK"

    Else

     MsgBox "Íàæàòà êíîïêà Îòìåíà"

    End If

    '*************  Êîíåö *********************************************

    Ïîäðîáíîå îïèñàíèå ôóíêöèè

    MsgBox
    ïðèâåäåíî â ïðèëîæåíèè 1. Çäåñü æå ìû îòìåòèì òîëüêî òî, ÷òî çíà÷åíèåì ôóíêöèè
    MsgBox
    ÿâëÿåòñÿ êîíñòàíòà, ñîîòâåòñòâóþùàÿ íàæàòîé â äèàëîãîâîì îêíå êíîïêè (â íàøåì ïðèìåðå òàêèìè êîíñòàíòàìè ÿâëÿþòñÿ
    vbOk
    è
    vbCancel
    ). Òàêèì îáðàçîì,
    MsgBox
    ìîæåò èñïîëüçîâàòüñÿ â ñöåíàðèÿõ äëÿ îðãàíèçàöèè âûáîðà ïîëüçîâàòåëåì îäíîãî èç âîçìîæíûõ âàðèàíòîâ, îäíàêî ýòî íå ñîâñåì óäîáíî, ò.ê. íàäïèñè íà êíîïêàõ íåëüçÿ çàäàâàòü ïðîèçâîëüíûì îáðàçîì (ìîæíî óêàçàòü òîëüêî OK, Îòìåíà, Ñòîï, Ïîâòîð, Ïðîïóñòèòü, Äà è Íåò).

    Ìåòîä Popup îáúåêòà WshShell

    Ñ ïîìîùüþ ìåòîäà

    Popup
    (ïîäðîáíîå îïèñàíèå ìåòîäà ïðèâåäåíî â ãëàâå 1) ìîæíî ñîçäàâàòü òàêèå æå äèàëîãîâûå îêíà, êàê è ïðè ïîìîùè ôóíêöèè
    MsgBox
    , ïðè÷åì ýòîò ìåòîä ìîæíî èñïîëüçîâàòü êàê â VBScript-, òàê è â JScript-ñöåíàðèÿõ (ëèñòèíãè 2.12 è 2.13).

    Ëèñòèíã 2.12. Ñîçäàíèå äèàëîãîâîãî îêíà ñ ïîìîùüþ ìåòîäà
    Popup
    (JScript)

    /*******************************************************************/

    /* Èìÿ: Popup.js                                                   */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà WshShell.Popup            */

    /*******************************************************************/

    var WshShell,Res,Text,Title; //Îáúÿâëÿåì ïåðåìåííûå

    //Èíèöèàëèçèðóåì êîíñòàíòû äëÿ äèàëîãîâûõ îêîí

    var vbOkCancel=1,vbOk=1;  

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    Text="Ïðèìåð âûâîäà ñòðîê â äèàëîãîâîå\nîêíî WScript";

    Title="Çàãîëîâîê"

    //Âûâîäèì äèàëîãîâîå îêíî íà ýêðàí

    Res=WshShell.Popup(Text,0,Title,vbOkCancel);

    // Îïðåäåëÿåì, êàêàÿ èç êíîïîê áûëà íàæàòà â äèàëîãîâîì îêíå

    if (Res==vbOk) WshShell.Popup("Íàæàòà êíîïêà OK");

    else WshShell.Popup("Íàæàòà êíîïêà Îòìåíà");

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.13. Ñîçäàíèå äèàëîãîâîãî îêíà ñ ïîìîùüþ ìåòîäà
    Popup
    (VBScript)

    '*******************************************************************

    ' Èìÿ: Popup.vbs

    ' ßçûê: VBcript

    ' Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà WshShell.Popup

    '*******************************************************************

    Option Explicit

    Dim WshShell,Res,Text,Title  ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    Text="Ïðèìåð âûâîäà ñòðîê â äèàëîãîâîå" & vbCrLf & "îêíî WScript"

    Title="Çàãîëîâîê"

    ' Âûâîäèì äèàëîãîâîå îêíî íà ýêðàí

    Res=WshShell.Popup(Text,0,Title,vbOkCancel)

    ' Îïðåäåëÿåì, êàêàÿ èç êíîïîê áûëà íàæàòà â äèàëîãîâîì îêíå

    If (Res=vbOk) Then

     WshShell.Popup "Íàæàòà êíîïêà OK"

    Else

     WshShell.Popup "Íàæàòà êíîïêà Îòìåíà"

    End If

    '*************  Êîíåö *********************************************

    Ãëàâíûì îòëè÷èåì ìåòîäà

    Popup
    îò ôóíêöèè
    MsgBox
    ÿâëÿåòñÿ íàëè÷èå ïàðàìåòðà
    nSecToWait
    , çàäàþùåãî âðåìÿ (â ñåêóíäàõ), ïî èñòå÷åíèè êîòîðîãî äèàëîãîâîå îêíî áóäåò àâòîìàòè÷åñêè çàêðûòî. Åñëè ýòîò ïàðàìåòð ðàâåí íóëþ, êàê â ïðèâåäåííûõ âûøå ïðèìåðàõ, òî îêíî áóäåò çàêðûòî òîëüêî ïîñëå íàæàòèÿ êàêîé-ëèáî êíîïêè â íåì.

    Ââîä ñòðîê òåêñòà

    Äëÿ îðãàíèçàöèè â ñöåíàðèÿõ äèàëîãà ñ ïîëüçîâàòåëåì íåîáõîäèìî óìåòü ïðèíèìàòü ââîäèìûå ñ êëàâèàòóðû ñòðîêè òåêñòà.  êîíñîëüíîì è ãðàôè÷åñêîì ðåæèìàõ ââîä èíôîðìàöèè îñóùåñòâëÿåòñÿ ïî-ðàçíîìó: ïðè çàïóñêå ñöåíàðèÿ ñ ïîìîùüþ cscript.exe ìû èìååì äîñòóï ê ñòàíäàðòíîìó âõîäíîìó ïîòîêó

    StdOut
    , ïðè èñïîëüçîâàíèè wscript.exe ìîæíî ïðèìåíÿòü ôóíêöèþ
    InputBox
    ÿçûêà VBScript.

    Ââîä ñòðîê â êîíñîëüíîì ðåæèìå

    Ñàìûé ïðîñòîé ñïîñîá ââåñòè ñòðîêó â êîíñîëüíîì ðåæèìå ïðåäîñòàâëÿåò ìåòîä

    WScript.StdIn.ReadLine
    , ïðè èñïîëüçîâàíèè ýòîãî ìåòîäà ââîä çàâåðøàåòñÿ íàæàòèåì êëàâèøè <Enter>.

    Îòìåòèì, ÷òî ïðè èñïîëüçîâàíèè ñòàíäàðòíîãî âõîäíîãî ïîòîêà

    WScript.StdIn
    â Windows ÕÐ (ïî êðàéíåé ìåðå â òîé âåðñèè, êîòîðîé ïîëüçîâàëñÿ àâòîð) âîçíèêàåò ïðîáëåìà, ñâÿçàííàÿ ñ êîäèðîâêîé ñèìâîëîâ êèðèëëèöû. Äåëî â òîì, ÷òî ìåòîä
    WScript.StdIn.ReadLine
    âîçâðàùàåò ñòðîêó â DOS-êîäèðîâêå, à äëÿ âûâîäà íà ýêðàí ñ ïîìîùüþ ìåòîäîâ
    WScript.StdOut.WriteLine
    èëè
    WScript.Echo
    ñòðîêà äîëæíà áûòü â Windows-êîäèðîâêå (â ïðåäûäóùèõ âåðñèÿõ Windows ìåòîä
    WScript.StdOut.WriteLine
    òðåáîâàë ñòðîêó â DOS-êîäèðîâêå). Ïîýòîìó äëÿ êîððåêòíîãî îòîáðàæåíèÿ ñèìâîëîâ êèðèëëèöû íà ýêðàíå ïðèõîäèòñÿ ïðèìåíÿòü äîïîëíèòåëüíûå ôóíêöèè êîíâåðòàöèè èç DOS- â Windows-êîäèðîâêó. Ñòàíäàðòíûõ ìåòîäîâ èëè ôóíêöèé, ïðåäíàçíà÷åííûõ äëÿ ýòîé öåëè, â ÿçûêàõ JScript è VBScript íåò, ïîýòîìó òàêèå ôóíêöèè ñëåäóåò íàïèñàòü ñàìîñòîÿòåëüíî.

    Ðàññìîòðèì ñíà÷àëà íàïèñàííóþ íà JScript ôóíêöèþ êîíâåðòàöèè DosToWin èç ëèñòèíãà 2.14:

    function DosToWin(s) {

     var i,ss;  //Îáúÿâëÿåì ïåðåìåííûå

     //Ïðîâåðÿåì, ñîçäàí ëè îáúåêò RusDict

     if (typeof(RusDict)=="undefined")

      //Åñëè îáúåêò RusDict íå ñîçäàí, ñîçäàåì åãî

      MakeRusDict();

     ss="";

     for (i=0;i<s.length;i++) {  //Öèêë ïî âñåì ñèìâîëàì â ñòðîêå

      if (RusDict.Exists(s.charAt(i)))  //Ïðîâåðÿåì íàëè÷èå ñèìâîëà â ñëîâàðå

       //Ïðåîáðàçóåì i-é ñèìâîë â Windows-êîäèðîâêó

       ss+=RusDict.Item(s.charAt(i));

      else ss+=s.charAt(i);

     }

     return ss;

    }

    Êàê ìû âèäèì, ýòà ôóíêöèÿ ïðåîáðàçóåò ïåðåäàííóþ â êà÷åñòâå ïàðàìåòðà ñòðîêó ñëåäóþùèì îáðàçîì: âñå ñèìâîëû êèðèëëèöû â ýòîé ñòðîêå ïåðåâîäÿòñÿ â Windows-êîäèðîâêó, îñòàëüíûå ñèìâîëû îñòàþòñÿ áåç èçìåíåíèé. Îñíîâíûì â ôóíêöèé

    DosToWin
    ÿâëÿåòñÿ èñïîëüçîâàíèå îáúåêòà
    Dictionary
    (àíàëîã àññîöèàòèâíîãî ìàññèâà) ñ èìåíåì
    RusDict
    . Ýòîò îáúåêò ôîðìèðóåòñÿ â ôóíêöèè
    MakeRusDict
    è ñîäåðæèò ïàðû "êëþ÷"–"çíà÷åíèå" äëÿ âñåõ áóêâ ðóññêîãî àëôàâèòà, ïðè÷åì â êà÷åñòâå êëþ÷à óêàçûâàåòñÿ áóêâà â DOS-êîäèðîâêå, à â êà÷åñòâå çíà÷åíèÿ — ñèìâîë ñ êîäîì, êîòîðûé ñîîòâåòñòâóåò ýòîé áóêâå â Windows-êîäèðîâêå:

    function MakeRusDict() {

     //Ñîçäàåì îáúåêò Dictionary

     RusDict = WScript.CreateObject("Scripting.Dictionary");

     //Çàïîëíÿåì ïàðû "êëþ÷" (ñèìâîë â DOS-êîäèðîâêå)-"çíà÷åíèå" (ñèìâîë â

     //Window-êîäèðîâêå) äëÿ âñåõ áóêâ ðóññêîãî àëôàâèòà

     RusDict.add("€", "À"); RusDict.add("�", "Á"); RusDict.add("‚", "Â");

     RusDict.add("ƒ", "Ã"); RusDict.add("„", "Ä"); RusDict.add("…", "Å");

     RusDict.add("ð", "¨"); RusDict.add("†", "Æ"); RusDict.add("‡", "Ç");

     RusDict.add("ˆ", "È"); RusDict.add("‰", "É"); RusDict.add("Š", "Ê");

     RusDict.add("‹", "Ë"); RusDict.add("Œ", "Ì"); RusDict.add("�", "Í");

     RusDict.add("Ž", "Î"); RusDict.add("�", "Ï"); RusDict.add("�", "Ð");

     RusDict.add("‘", "Ñ"); RusDict.add("’", "Ò"); RusDict.add("“", "Ó");

     RusDict.add("”", "Ô"); RusDict.add("•", "Õ"); RusDict.add("–", "Ö");

     RusDict.add("—", "×"); RusDict.add("˜", "Ø"); RusDict.add("™", "Ù");

     RusDict.add("š", "Ú"); RusDict.add("›", "Û"); RusDict.add("œ", "Ü");

     RusDict.add("�", "Ý"); RusDict.add("ž", "Þ"); RusDict.add("Ÿ", "ß");

     RusDict.add(" ", "à"); RusDict.add("¡", "á"); RusDict.add("¢", "â");

     RusDict.add("£", "ã"); RusDict.add("¤", "ä"); RusDict.add("¥", "å");

     RusDict.add("ñ", "¸"); RusDict.add("¦", "æ"); RusDict.add("§", "ç");

     RusDict.add("¨", "è"); RusDict.add("©", "é"); RusDict.add("ª", "ê");

     RusDict.add("«", "ë"); RusDict.add("¬", "ì"); RusDict.add("­", "í");

     RusDict.add("®", "î"); RusDict.add("¯", "ï"); RusDict.add("à", "ð");

     RusDict.add("á", "ñ"); RusDict.add("â", "ò"); RusDict.add("ã", "ó");

     RusDict.add("ä", "ô"); RusDict.add("å", "õ"); RusDict.add("æ", "ö");

     RusDict.add("ç", "÷"); RusDict.add("è", "ø"); RusDict.add("é", "ù");

     RusDict.add("ê", "ú"); RusDict.add("ë", "û"); RusDict.add("ì", "ü");

     RusDict.add("í", "ý"); RusDict.add("î", "þ"); RusDict.add("ï", "ÿ");

    }

    Â ôóíêöèè

    DosToWin
    èç VBScript-ñöåíàðèÿ StdIn1.vbs (ëèñòèíã 2.15) ðåàëèçîâàí äðóãîé ïîäõîä ê ïåðåâîäó ñòðîêè â Windows-êîäèðîâêó, ñâÿçàííûé ñ ïðåîáðàçîâàíèåì ANSI-êîäîâ ñèìâîëîâ:

    Function DosToWin(s)

    Dim i,k,ss

     ss=""

     For i=1 To Len(s)  ' Öèêë ïî âñåì ñèìâîëàì â ñòðîêå

      k = Asc(Mid(s,i,1))  ' Îïðåäåëÿåì ANSI-êîä i-ãî ñèìâîëà

      ' Èçìåíÿåì êîä k íà êîä ñîîòâåòñòâóþùåãî ñèìâîëà â

      ' Windows-êîäèðîâêå

      If (128 <= k) And (k <= 175) Then

       k=k+64

      ElseIf (224 <= k) And (k <= 239) Then

       k=k+16

      ElseIf k = 240 Then

       k=168

      ElseIf k = 241 Then

       k=184

      End If

      ss=ss+Chr(k)  ' Âîçâðàùàåì ïðåîáðàçîâàííóþ ñòðîêó

     Next

     DosToWin=ss

    End Function

    Âåñü àëãîðèòì ýòîé ôóíêöèè ñîñòîèò â âû÷èñëåíèè ïî ANSI-êîäó áóêâû ðóññêîãî àëôàâèòà â DOS-êîäèðîâêå êîäà ñèìâîëà â Windows-êîäèðîâêå, ñîîòâåòñòâóþùåãî ýòîé áóêâå.

    Ëèñòèíã 2.14. Ââîä îäíîé ñòðîêè ñ ïîìîùüþ ìåòîäà
    StdIn.ReadLine
    (JScript)

    /*******************************************************************/

    /* Èìÿ: StdIn1.js                                                  */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà StdIn.ReadLine            */

    /*******************************************************************/

    var s,RusDict;  //Îáúÿâëÿåì ïåðåìåííûå

    //Ôóíêöèÿ äëÿ ñîçäàíèÿ îáúåêòà Dictionary ñ ïàðàìè "êëþ÷-çíà÷åíèå", ãäå

    //"êëþ÷"-áóêâà â DOS-êîäèðîâêå, "çíà÷åíèå"- ñèìâîë, ñîîòâåòñòâóþùèé ýòîé

    //áóêâå â Windows-êîäèðîâêå

    function MakeRusDict() {

      //Ñîçäàåì îáúåêò Dictionary

     RusDict = WScript.CreateObject("Scripting.Dictionary");

     //Çàïîëíÿåì ïàðû "êëþ÷" (ñèìâîë â DOS-êîäèðîâêå)-"çíà÷åíèå" (ñèìâîë â

     //Window-êîäèðîâêå) äëÿ âñåõ áóêâ ðóññêîãî àëôàâèòà

     RusDict.add("€", "À"); RusDict.add("�", "Á"); RusDict.add("‚", "Â");

     RusDict.add("ƒ", "Ã"); RusDict.add("„", "Ä"); RusDict.add("…", "Å");

     RusDict.add("ð", "¨"); RusDict.add("†", "Æ"); RusDict.add("‡", "Ç");

     RusDict.add("ˆ", "È"); RusDict.add("‰", "É"); RusDict.add("Š", "Ê");

     RusDict.add("‹", "Ë"); RusDict.add("Œ", "Ì"); RusDict.add("�", "Í");

     RusDict.add("Ž", "Î"); RusDict.add("�", "Ï"); RusDict.add("�", "Ð");

     RusDict.add("‘", "Ñ"); RusDict.add("’", "Ò"); RusDict.add("“", "Ó");

     RusDict.add("”", "Ô"); RusDict.add("•", "Õ"); RusDict.add("–", "Ö");

     RusDict.add("—", "×"); RusDict.add("˜", "Ø"); RusDict.add("™", "Ù");

     RusDict.add("š", "Ú"); RusDict.add("›", "Û"); RusDict.add("œ", "Ü");

     RusDict.add("�", "Ý"); RusDict.add("ž", "Þ"); RusDict.add("Ÿ", "ß");

     RusDict.add(" ", "à"); RusDict.add("¡", "á"); RusDict.add("¢", "â");

     RusDict.add("£", "ã"); RusDict.add("¤", "ä"); RusDict.add("¥", "å");

     RusDict.add("ñ", "¸"); RusDict.add("¦", "æ"); RusDict.add("§", "ç");

     RusDict.add("¨", "è"); RusDict.add("©", "é"); RusDict.add("ª", "ê");

     RusDict.add("«", "ë"); RusDict.add("¬", "ì"); RusDict.add("­", "í");

     RusDict.add("®", "î"); RusDict.add("¯", "ï"); RusDict.add("à", "ð");

     RusDict.add("á", "ñ"); RusDict.add("â", "ò"); RusDict.add("ã", "ó");

     RusDict.add("ä", "ô"); RusDict.add("å", "õ"); RusDict.add("æ", "ö");

     RusDict.add("ç", "÷"); RusDict.add("è", "ø"); RusDict.add("é", "ù");

     RusDict.add("ê", "ú"); RusDict.add("ë", "û"); RusDict.add("ì", "ü");

     RusDict.add("í", "ý"); RusDict.add("î", "þ"); RusDict.add("ï", "ÿ");

    }

    //Ôóíêöèÿ äëÿ ïåðåâîäà ñòðîêè èç DOS- â Windows-êîäèðîâêó

    function DosToWin(s) {

     var i,ss;  //Îáúÿâëÿåì ïåðåìåííûå

     //Ïðîâåðÿåì, ñîçäàí ëè îáúåêò RusDict

     if (typeof(RusDict)=="undefined")

      //Åñëè îáúåêò RusDict íå ñîçäàí, ñîçäàåì åãî

      MakeRusDict();

     ss="";

     for (i=0;i<s.length;i++) {  //Öèêë ïî âñåì ñèìâîëàì â ñòðîêå

      if (RusDict.Exists(s.charAt(i)))  //Ïðîâåðÿåì íàëè÷èå ñèìâîëà â ñëîâàðå

       //Ïðåîáðàçóåì i-é ñèìâîë â Windows-êîäèðîâêó

       ss+=RusDict.Item(s.charAt(i));

      else ss+=s.charAt(i);

     }

     return ss;

    }

    /*************  Íà÷àëî *********************************************/

    //Ïå÷àòàåì ïðèãëàøåíèå äëÿ ââîäà

    WScript.StdOut.Write("Ââåäèòå îäíó ñòðîêó: ");

    s = WScript.StdIn.ReadLine();  //Ââîäèì ñòðîêó ñ êëàâèàòóðû

    WScript.StdOut.WriteBlankLines(1);  //Ïå÷àòàåì ïóñòóþ ñòðîêó

    WScript.StdOut.Write("Áûëî ââåäåíî: ");

    //Ïðåîáðàçîâûâàåì ââåäåííóþ ñòðîêó â Windows-êîäèðîâêó

    //è âûâîäèì åå íà ýêðàí

    WScript.StdOut.WriteLine(DosToWin(s));

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.15. Ââîä îäíîé ñòðîêè ñ ïîìîùüþ ìåòîäà StdIn ReadLine (VBScript)

    '*******************************************************************

    ' Èìÿ: StdIn1.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà StdIn.WriteLine

    '*******************************************************************

    ' Ôóíêöèÿ äëÿ ïåðåâîäà ñòðîêè èç DOS- â Windows-êîäèðîâêó

    Function DosToWin(s)

    Dim i,k,ss

     ss=""

     For i=1 To Len(s)  ' Öèêë ïî âñåì ñèìâîëàì â ñòðîêå

      k = Asc(Mid(s,i,1))  ' Îïðåäåëÿåì ANSI-êîä i-ãî ñèìâîëà

      ' Èçìåíÿåì êîä k íà êîä ñîîòâåòñòâóþùåãî ñèìâîëà â

      ' Windows-êîäèðîâêå

      If (128 <= k) And (k <= 175) Then

       k=k+64

      ElseIf (224 <= k) And (k <= 239) Then

       k=k+16

      ElseIf k = 240 Then

       k=168

      ElseIf k = 241 Then

       k=184

      End If

      ss=ss+Chr(k)  ' Âîçâðàùàåì ïðåîáðàçîâàííóþ ñòðîêó

     Next

     DosToWin=ss

    End Function

    '*************  Íà÷àëî *********************************************

    Dim s

    ' Ïå÷àòàåì ïðèãëàøåíèå äëÿ ââîäà

    WScript.StdOut.Write "Ââåäèòå îäíó ñòðîêó: "

    s = WScript.StdIn.ReadLine  ' Ââîäèì ñòðîêó ñ êëàâèàòóðû

    WScript.StdOut.WriteBlankLines 1   ' Ïå÷àòàåì ïóñòóþ ñòðîêó

    WScript.StdOut.Write "Áûëî ââåäåíî: "

    ' Ïðåîáðàçîâûâàåì ââåäåííóþ ñòðîêó â Windows-êîäèðîâêó

    ' è âûâîäèì åå íà ýêðàí

    WScript.StdOut.WriteLine DosToWin(s)

    '*************  Êîíåö *********************************************


    Èñïîëüçóÿ ìåòîä

    WScript.StdIn.ReadAll
    , ìîæíî ââåñòè ñðàçó íåñêîëüêî ñòðîê ïîäðÿä, ââîä ïðè ýòîì ïðåêðàùàåòñÿ ïîñëå íàæàòèÿ êëàâèø <Ctrl>+<Z>. Èç ââåäåííîé òàêèì îáðàçîì ïåðåìåííîé ìîæíî çàòåì ñôîðìèðîâàòü ìàññèâ, ñîäåðæàùèé âñå ñòðîêè. Äëÿ ýòîãî â JScript ïðèìåíÿåòñÿ ìåòîä
    split
    îáúåêòà
    string
    , à â VBScript — îäíîèìåííàÿ âíóòðåííÿÿ ôóíêöèÿ
    Split
    (ëèñòèíãè 2.16 è 2.17). 

    Ëèñòèíã 2.16. Ââîä íåñêîëüêèõ ñòðîê ñ ïîìîùüþ ìåòîäà
    StdIn.ReadAll
    (JScript)

    /*******************************************************************/

    /* Èìÿ: StdIn2.js                                                  */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà StdIn.ReadAll             */

    /*******************************************************************/

    var RusDict;

    //Ôóíêöèÿ äëÿ ñîçäàíèÿ îáúåêòà Dictionary ñ ïàðàìè "êëþ÷-çíà÷åíèå", ãäå

    //"êëþ÷"-áóêâà â DOS-êîäèðîâêå, "çíà÷åíèå"- ñèìâîë, ñîîòâåòñòâóþùèé ýòîé

    //áóêâå â Windows-êîäèðîâêå

    function MakeRusDict() {

     //Ñîçäàåì îáúåêò Dictionary

     RusDict = WScript.CreateObject("Scripting.Dictionary");

     //Çàïîëíÿåì ïàðû "êëþ÷" (ñèìâîë â DOS-êîäèðîâêå)-"çíà÷åíèå" (ñèìâîë â

     //Window-êîäèðîâêå) äëÿ âñåõ áóêâ ðóññêîãî àëôàâèòà

     RusDict.add("€", "À"); RusDict.add("�", "Á"); RusDict.add("‚", "Â");

     RusDict.add("ƒ", "Ã"); RusDict.add("„", "Ä"); RusDict.add("…", "Å");

     RusDict.add("ð", "¨"); RusDict.add("†", "Æ"); RusDict.add("‡", "Ç");

     RusDict.add("ˆ", "È"); RusDict.add("‰", "É"); RusDict.add("Š", "Ê");

     RusDict.add("‹", "Ë"); RusDict.add("Œ", "Ì"); RusDict.add("�", "Í");

     RusDict.add("Ž", "Î"); RusDict.add("�", "Ï"); RusDict.add("�", "Ð");

     RusDict.add("‘", "Ñ"); RusDict.add("’", "Ò"); RusDict.add("“", "Ó");

     RusDict.add("”", "Ô"); RusDict.add("•", "Õ"); RusDict.add("–", "Ö");

     RusDict.add("—", "×"); RusDict.add("˜", "Ø"); RusDict.add("™", "Ù");

     RusDict.add("š", "Ú"); RusDict.add("›", "Û"); RusDict.add("œ", "Ü");

     RusDict.add("�", "Ý"); RusDict.add("ž", "Þ"); RusDict.add("Ÿ", "ß");

     RusDict.add(" ", "à"); RusDict.add("¡", "á"); RusDict.add("¢", "â");

     RusDict.add("£", "ã"); RusDict.add("¤", "ä"); RusDict.add("¥", "å");

     RusDict.add("ñ", "¸"); RusDict.add("¦", "æ"); RusDict.add("§", "ç");

     RusDict.add("¨", "è"); RusDict.add("©", "é"); RusDict.add("ª", "ê");

     RusDict.add("«", "ë"); RusDict.add("¬", "ì"); RusDict.add("­", "í");

     RusDict.add("®", "î"); RusDict.add("¯", "ï"); RusDict.add("à", "ð");

     RusDict.add("á", "ñ"); RusDict.add("â", "ò"); RusDict.add("ã", "ó");

     RusDict.add("ä", "ô"); RusDict.add("å", "õ"); RusDict.add("æ", "ö");

     RusDict.add("ç", "÷"); RusDict.add("è", "ø"); RusDict.add("é", "ù");

     RusDict.add("ê", "ú"); RusDict.add("ë", "û"); RusDict.add("ì", "ü");

     RusDict.add("í", "ý"); RusDict.add("î", "þ"); RusDict.add("ï", "ÿ");

    }

    //Ôóíêöèÿ äëÿ ïåðåâîäà ñòðîêè èç DOS- â Windows-êîäèðîâêó

    function DosToWin(s) {

     var i,ss;  //Îáúÿâëÿåì ïåðåìåííûå

     //Ïðîâåðÿåì, ñîçäàí ëè îáúåêò RusDict

     if (typeof(RusDict)=="undefined")

      //Åñëè îáúåêò RusDict íå ñîçäàí, ñîçäàåì åãî

      MakeRusDict();

     ss="";

     for (i=0;i<s.length;i++) {  //Öèêë ïî âñåì ñèìâîëàì â ñòðîêå

      if (RusDict.Exists(s.charAt(i)))  //Ïðîâåðÿåì íàëè÷èå ñèìâîëà â ñëîâàðå

       //Ïðåîáðàçóåì i-é ñèìâîë â Windows-êîäèðîâêó

       ss+=RusDict.Item(s.charAt(i));

      else ss+=s.charAt(i);

     }

     return ss;

    }

    /*************  Íà÷àëî *********************************************/

    var s,ArrS,i;  //Îáúÿâëÿåì ïåðåìåííûå

    //Ïå÷àòàåì ïðèãëàøåíèå äëÿ ââîäà

    WScript.StdOut.WriteLine("Ââîäèòå ñòðîêè:");

    s = WScript.StdIn.ReadAll();  //Ââîäèì ñòðîêè ñ êëàâèàòóðû

    WScript.StdOut.WriteBlankLines(3);  //Ïå÷àòàåì ïóñòûå ñòðîêè

    ArrS=s.split("\n");  //Ôîðìèðóåì ìàññèâ èç ââåäåííûõ ñòðîê

    WScript.StdOut.WriteLine("Âñåãî âåäåíî ñòðîê: "+ArrS.length);

    for (i=1;i<=ArrS.length;i++)

     //Ïðåîáðàçîâûâàåì ââåäåííûå ñòðîêè â Windows-êîäèðîâêó

     //è âûâîäèì èõ íà ýêðàí

     WScript.StdOut.WriteLine(i+": "+DosToWin(ArrS[i-1]));

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.17. Ââîä íåñêîëüêèõ ñòðîê ñ ïîìîùüþ ìåòîäà
    StdIn.ReadAll
    (VBScript)

    '*******************************************************************

    ' Èìÿ: StdIn2.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ìåòîäà StdIn.ReadAll

    '*******************************************************************

    Option Explicit

    ' Ôóíêöèÿ äëÿ ïåðåâîäà ñòðîêè èç DOS- â Windows-êîäèðîâêó

    Function DosToWin(s)

    Dim i,k,ss

     ss=""

     For i=1 To Len(s)  ' Öèêë ïî âñåì ñèìâîëàì â ñòðîêå

      k = Asc(Mid(s,i,1))  ' Îïðåäåëÿåì ANSI-êîä i-ãî ñèìâîëà

      ' Èçìåíÿåì êîä k íà êîä ñîîòâåòñòâóþùåãî ñèìâîëà â

      ' Windows-êîäèðîâêå

      If (128 <= k) And (k <= 175) Then

       k=k+64

      ElseIf (224 <= k) And (k <= 239) Then

       k=k+16

      ElseIf k = 240 Then

       k=168

      ElseIf k = 241 Then

       k=184

      End If

      ss=ss+Chr(k)

     Next

     DosToWin=ss   ' Âîçâðàùàåì ïðåîáðàçîâàííóþ ñòðîêó

    End Function

    '*************  Íà÷àëî *********************************************

    Dim s,ArrS,i,ColStr   ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ïå÷àòàåì ïðèãëàøåíèå äëÿ ââîäà

    WScript.StdOut.WriteLine "Ââîäèòå ñòðîêè:"

    s = WScript.StdIn.ReadAll  ' Ââîäèì ñòðîêè ñ êëàâèàòóðû

    WScript.StdOut.WriteBlankLines 3  ' Ïå÷àòàåì ïóñòûå ñòðîêè

    ArrS=Split(s,vbCrLf)  ' Ôîðìèðóåì ìàññèâ èç ââåäåííûõ ñòðîê

    ColStr=UBound(ArrS)+1

    ' Ïå÷àòàåì ââåäåííûå ñòðîêè

    WScript.StdOut.WriteLine "Âñåãî âåäåíî ñòðîê: " & ColStr

    For i=1 To ColStr

     ' Ïðåîáðàçîâûâàåì ââåäåííûå ñòðîêè â Windows-êîäèðîâêó

     ' è âûâîäèì èõ íà ýêðàí

     WScript.StdOut.WriteLine i & ": " & DosToWin(ArrS(i-1))

    Next

    '*************  Êîíåö *********************************************/
     

    Ââîä ñòðîê â ãðàôè÷åñêîì ðåæèìå 

     ñöåíàðèÿõ VBScript â ãðàôè÷åñêîì ðåæèìå èíôîðìàöèþ ìîæíî ââîäèòü ñ ïîìîùüþ äèàëîãîâîãî îêíà, ñîçäàâàåìîãî âíóòðåííåé ôóíêöèåé

    InputBox
    (ðèñ. 2.6).

    Ðèñ. 2.6. Äèàëîãîâîå îêíî ñî ñòðîêîé ââîäà


     Ïðèìåð ñöåíàðèÿ, èñïîëüçóþùåãî ôóíêöèþ

    InputBox
    , ïðåäñòàâëåí â ëèñòèíãå 2.18 (ïîäðîáíîå îïèñàíèå ïàðàìåòðîâ ôóíêöèè InputBox ñì. â ïðèëîæåíèè 1).

    Ëèñòèíã 2.18. Ââîä îäíîé ñòðîêè ñ ïîìîùüþ ôóíêöèè InputBox (VBScript)

    '*******************************************************************

    ' Èìÿ: InpBox.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè InputBox

    '*******************************************************************

    Option Explicit

    Dim s,s1  ' Îáúÿâëÿåì ïåðåìåííûå

    s1="Ïðèìåð" & vbCrLf & "äèàëîãîâîãî îêíà" & vbCrLf & "äëÿ ââîäà ñòðîêè"

    ' Âûâîäèì äèàëîãîâîå îêíî ñî ñòðîêîé ââîäà íà ýêðàí

    s=InputBox(s1,"Äèàëîãîâîå îêíî VBScript")

    ' Âûâîäèì äèàëîãîâîå îêíî ñ ââåäåííîé ñòðîêîé

    MsgBox "Áûëî ââåäåíî: " & s

    '*************  Êîíåö *********************************************/

    Ê ñîæàëåíèþ, íè â ÿçûêå JScript, íè â îáúåêòíîé ìîäåëè WSH íåò ôóíêöèè èëè ìåòîäà, ïîçâîëÿþùèõ íàïðÿìóþ ñîçäàâàòü äèàëîãîâûå îêíà ñî ñòðîêîé ââîäà. Îäíàêî ïðè ïîìîùè ôàéëîâ ñöåíàðèåâ ñ XML-ðàçìåòêîé, îïèñàííûõ â ãëàâå 3, ôóíêöèè ÿçûêà VBScript (

    InputBox
    â ÷àñòíîñòè) ìîæíî èñïîëüçîâàòü âíóòðè JScript-ñöåíàðèÿ (ñîîòâåòñòâóþùèé ïðèìåð ïðèâåäåí â ëèñòèíãå 3.11).

    Ïîëó÷åíèå ñâîéñòâ WSH è çàïóùåííîãî ñöåíàðèÿ

    Íà ïðàêòèêå ÷àñòî áûâàåò íåîáõîäèìî çíàòü îïðåäåëåííûå àòðèáóòû WSH (íàïðèìåð, ñ ïîìîùüþ êàêîãî ïðèëîæåíèÿ-ñåðâåðà áûë çàïóùåí ñöåíàðèé) è ñöåíàðèÿ, ðàáîòàþùåãî â äàííûé ìîìåíò (íàïðèìåð, èìÿ ýòîãî ñöåíàðèÿ èëè ïóòü ê êàòàëîãó, â êîòîðîì îí íàõîäèòñÿ). Íåêîòîðûå ïàðàìåòðû WSH è èñïîëíÿåìîãî ñöåíàðèÿ ìîæíî îïðåäåëèòü íåïîñðåäñòâåííî ñ ïîìîùüþ ñîîòâåòñòâóþùèõ ìåòîäîâ îáúåêòà

    WScript
    :

    ? ïîëíûé ïóòü ê ïðèëîæåíèþ-ñåðâåðó (cscript.exe èëè wscript.exe);

    ? èìÿ êàòàëîãà, â êîòîðîì íàõîäèòñÿ ïðèëîæåíèå-ñåðâåð;

    ? íîìåð èñïîëüçóåìîé âåðñèè WSH;

    ? ïîëíûé ïóòü ê èñïîëíÿåìîìó ñöåíàðèþ;

    ? èìÿ èñïîëíÿåìîãî ñöåíàðèÿ.

    Äëÿ ïðîâåðêè ðåæèìà, â êîòîðîì áûë çàïóùåí ñöåíàðèé, ìîæíî ïðåäëîæèòü ôóíêöèþ

    IsCScript
    (íèæå ïðèâåäåíà ðåàëèçàöèÿ ýòîé ôóíêöèè íà ÿçûêå JScript), êîòîðàÿ áóäåò âîçâðàùàòü
    true
    , åñëè èñïîëüçîâàëñÿ õîñò cscript.exe (êîíñîëüíûé ðåæèì), è
    false
    , åñëè èñïîëüçîâàëñÿ wscript.exe (ãðàôè÷åñêèé ðåæèì):

    function IsCScript() {

     //Ïðîâåðêà ðåæèìà, â êîòîðîì çàïóùåí ñöåíàðèé

     return ("ñ"== WScript.FullName.toLowerCase().charAt(WScript.FullName.length - 11));

    }

    Êàê ìû âèäèì, âñÿ ðàáîòà ôóíêöèè

    IsCScript
    ñîñòîèò â îïðåäåëåíèè òîãî, ñ êàêîé áóêâû íà÷èíàåòñÿ èìÿ ïðèëîæåíèÿ-ñåðâåðà ("ñ" äëÿ cscript.exe èëè "w" äëÿ wscript.exe).

    Ïîëíûé ïóòü ê òåêóùåìó êàòàëîãó, ò.å. ê êàòàëîãó, èç êîòîðîãî áûë çàïóùåí ñöåíàðèé, õðàíèòñÿ â ñâîéñòâå

    CurrentDirectory
    îáúåêòà
    WshShell
    .

    Åñëè ñöåíàðèé áûë çàïóùåí íå èç òîãî êàòàëîãà, â êîòîðîì íàõîäèòñÿ ñàì ôàéë ñî ñöåíàðèåì, òî òåêóùèé êàòàëîã íå áóäåò ñîâïàäàòü ñ êàòàëîãîì ñöåíàðèÿ. Äëÿ òîãî ÷òîáû ïîëó÷èòü ïóòü ê êàòàëîãó ñöåíàðèÿ, íóæíî âûäåëèòü ýòîò ïóòü èç ñâîéñòâà

    WScript.ScriptFullName
    , ñîäåðæàùåìó ïîëíûé ïóòü ê âûïîëíÿåìîìó ñöåíàðèþ (âêëþ÷àÿ èìÿ ôàéëà). Íà ÿçûêå JScript ýòî ìîæíî ðåàëèçîâàòü ñ ïîìîùüþ ôóíêöèè
    GetScriptDir
    ñëåäóþùåãî ñîäåðæàíèÿ:

    function GetScriptDir() {

     var ScriptDir;

     ScriptDir = WScript.ScriptFullName;

     ScriptDir = ScriptDir.substring(0, ScriptDir.lastIndexOf("\\"));

     return ScriptDir;

    }

    Ïîëíûå òåêñòû ñöåíàðèåâ íà ÿçûêàõ JScript (PropScript.js) è VBScript (PropScript.vbs), âûâîäÿùèõ íà ýêðàí ñâåäåíèÿ î ñâîéñòâà WSH è çàïóùåííîãî ñöåíàðèÿ, ïðèâåäåíû â ëèñòèíãàõ 2.19 è 2.20 ñîîòâåòñòâåííî; ðåçóëüòàò ðàáîòû ñöåíàðèÿ PropScript.js ïðåäñòàâëåí íà ðèñ. 2.7.

    Ðèñ. 2.7. Ðåçóëüòàòû âûïîëíåíèÿ ñöåíàðèÿ PropScript.js â ãðàôè÷åñêîì ðåæèìå


    Ëèñòèíã 2.19. Âûâîä ñâîéñòâ WSH è çàïóùåííîãî ñöåíàðèÿ (JScript)

    /*******************************************************************/

    /* Èìÿ: PropScript.js                                              */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Âûâîä ñâîéñòâ çàïóùåííîãî ñöåíàðèÿ                    */

    /*******************************************************************/

    //Ïðîâåðêà ðåæèìà, â êîòîðîì çàïóùåí ñöåíàðèé

    function IsCScript() {  

     return ("c"== WScript.FullName.toLowerCase().charAt(WScript.FullName.length - 11));

    }

    //Âîçâðàùàåò êàòàëîã, ñîäåðæàùèé çàïóùåííûé ñöåíàðèé

    function GetScriptDir() {

     var ScriptDir;

     ScriptDir = WScript.ScriptFullName;

     ScriptDir = ScriptDir.substring(0, ScriptDir.lastIndexOf("\\"));

     return ScriptDir;

    }

    /*******************  Íà÷àëî  **********************************/

    var WshShell,s; //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshShell

    WshShell=WScript.CreateObject("WScript.Shell");

    s="                   Ñâîéñòâà çàïóùåííîãî ñöåíàðèÿ:\n\n";

    //Ïðîâåðÿåì, â êàêîì ðåæèìå áûë çàïóùåí ñöåíàðèé

    if (IsCScript()) s+="Çàïóùåí â êîíñîëüíîì ðåæèìå\n";

    else s+="Çàïóùåí â ãðàôè÷åñêîì ðåæèìå\n";

    //Îïðåäåëÿåì îñòàëüíûå ïàðàìåòðû

    s+="Ïóòü ê ñåðâåðó: "+WScript.FullName+"\n";

    s+="Êàòàëîã ñåðâåðà: "+WScript.Path+"\n";

    s+="Âåðñèÿ WSH: "+WScript.Version+"\n\n";

    s+="Òåêóùèé êàòàëîã: "+ WshShell.CurrentDirectory+"\n";

    s+="Ïóòü ê ñöåíàðèþ: "+WScript.ScriptFullName+"\n";

    s+="Êàòàëîã ñöåíàðèÿ: "+GetScriptDir()+"\n";

    s+="Èìÿ ñöåíàðèÿ: "+WScript.ScriptName+"\n";

    WScript.Echo(s);  //Âûâîäèì ñôîðìèðîâàííûå ñòðîêè

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.20. Âûâîä ñâîéñòâ WSH è çàïóùåííîãî ñöåíàðèÿ (VBScript)

    '*******************************************************************

    ' Èìÿ: PropScript.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Âûâîä ñâîéñòâ çàïóùåííîãî ñöåíàðèÿ

    '*******************************************************************

    Option Explicit

    ' Ïðîâåðêà ðåæèìà, â êîòîðîì çàïóùåí ñöåíàðèé

    Function IsCScript()

     IsCScript=("c"=Mid(LCase(WScript.FullName),Len(WScript.FullName)-10,1))

    End Function

    ' Âîçâðàùàåò êàòàëîã, ñîäåðæàùèé çàïóùåííûé ñöåíàðèé

    Function GetScriptDir()

     Dim ScriptDir

     ScriptDir = WScript.ScriptFullName

     ScriptDir = Left(ScriptDir, InstrRev(ScriptDir,"\")-1)

     GetScriptDir=ScriptDir

    End Function

    '*******************  Íà÷àëî  **********************************/

    Dim WshShell,s   ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell=WScript.CreateObject("WScript.Shell")

    s="                   Ñâîéñòâà çàïóùåííîãî ñöåíàðèÿ:" & vbCrLf & vbCrLf

    ' Ïðîâåðÿåì, â êàêîì ðåæèìå áûë çàïóùåí ñöåíàðèé

    If IsCScript() Then

     s=s & "Çàïóùåí â êîíñîëüíîì ðåæèìå" & vbCrLf

    Else

     s=s & "Çàïóùåí â ãðàôè÷åñêîì ðåæèìå" & vbCrLf

    End If

    ' Îïðåäåëÿåì îñòàëüíûå ïàðàìåòðû

    s=s & "Ïóòü ê ñåðâåðó: " & WScript.FullName & vbCrLf

    s=s & "Êàòàëîã ñåðâåðà: " & WScript.Path & vbCrLf

    s=s & "Âåðñèÿ WSH: " & WScript.Version & vbCrLf & vbCrLf

    s=s & "Òåêóùèé êàòàëîã: "+ WshShell.CurrentDirectory & vbCrLf

    s=s & "Ïóòü ê ñöåíàðèþ: " & WScript.ScriptFullName & vbCrLf

    s=s & "Êàòàëîã ñöåíàðèÿ: " & GetScriptDir()  & vbCrLf

    s=s & "Èìÿ ñöåíàðèÿ: " & WScript.ScriptName & vbCrLf

    WScript.Echo s   ' Âûâîäèì ñôîðìèðîâàííûå ñòðîêè

    '*************  Êîíåö *********************************************

    Ðàáîòà ñ ïàðàìåòðàìè êîìàíäíîé ñòðîêè ñöåíàðèÿ

    Èñïîëüçóÿ àðãóìåíòû êîìàíäíîé ñòðîêè, â ñöåíàðèè ìîæíî ïåðåäàâàòü ðàçëè÷íóþ èíôîðìàöèþ, ñêàæåì, òå èëè èíûå ïåðåêëþ÷àòåëè èëè èìåíà ïîëüçîâàòåëåé è ðàáî÷èõ ñòàíöèé. Ïðè çàäàíèè àðãóìåíòà ìîæíî óêàçàòü ëèáî òîëüêî åãî çíà÷åíèå, ëèáî èìÿ âìåñòå ñî çíà÷åíèåì â ñëåäóþùåì ôîðìàòå: "Èìÿ_àðãóìåíòà:Çíà÷åíèå".

    Çàìå÷àíèå

    Êàê â èìåíè àðãóìåíòà, òàê è â åãî çíà÷åíèè ìîãóò èñïîëüçîâàòüñÿ ñèìâîëû êèðèëëèöû.

    Íàïðèìåð, âûïîëíèâ â êîìàíäíîì îêíå ñòðîêó

    cscript Example.js /Èìÿ:"Àíäðåé Ïîïîâ" /Âîçðàñò:30

    èëè

    cscript Example.js /Âîçðàñò:30 /Èìÿ:"Àíäðåé Ïîïîâ"

    ìû ïåðåäàäèì â ñöåíàðèé Example.js äâà ïàðàìåòðà: "Èìÿ" ñî çíà÷åíèåì "Àíäðåé Ïîïîâ" è "Âîçðàñò" ñî çíà÷åíèåì "30". Çíà÷åíèÿ ýòèõ ïàðàìåòðîâ ìîæíî áûëî ïåðåäàòü è êàê áåçûìÿííûå ïàðàìåòðû:

    cscript Example.js "Àíäðåé Ïîïîâ" 30

    Îäíàêî â ïîñëåäíåì ñëó÷àå ïðè çàäàíèè áåçûìÿííûõ àðãóìåíòîâ áóäåò âàæåí ïîðÿäîê èõ óêàçàíèÿ â êîìàíäíîé ñòðîêå.

    Â WSH äëÿ îáðàáîòêè ïàðàìåòðîâ êîìàíäíîé ñòðîêè ñëóæàò ñëåäóþùèå îáúåêòû-êîëëåêöèè:

    ?

    WshArguments
    (ñîäåðæèò âñå ïàðàìåòðû, êàê èìåííûå, òàê è áåçûìÿííûå);

    ?

    WshNamed
    (ñîäåðæèò òîëüêî èìåííûå ïàðàìåòðû);

    ?

    WshUnnamed
    (ñîäåðæèò òîëüêî áåçûìÿííûå ïàðàìåòðû).

    Çàìå÷àíèå

    Îïèñàíèå àðãóìåíòîâ êîìàíäíîé ñòðîêè â ñöåíàðèÿõ ìîæíî çàäàâàòü ñ ïîìîùüþ XML-ýëåìåíòîâ

    <runtime>
    ,
    <named>
    è
    <unnamed>
    (ñì. ãëàâó 3).

    Äëÿ äîñòóïà ê êîëëåêöèÿì, ñîäåðæàùèì àðãóìåíòû êîìàíäíîé ñòðîêè, â ñöåíàðèè ñíà÷àëà íóæíî ñîçäàòü ïåðåìåííóþ-ýêçåìïëÿð îáúåêòà

    WshArguments
    ; äëÿ ýòîãî èñïîëüçóåòñÿ ñâîéñòâî
    Arguments
    îáúåêòà
    WScript
    . Ïðèìåð íà ÿçûêå JScript:

    var objArgs=WScript.Arguments;

    Äëÿ ñîçäàíèÿ ýêçåìïëÿðîâ êîëëåêöèé

    WshNamed
    è
    WshUnnamed
    èñïîëüçóþòñÿ ñîîòâåòñòâåííî ìåòîäû
    Named
    è
    Unnamed
    îáúåêòà
    WshArguments
    . Íàïðèìåð:

    var objNamedArgs=objArgs.Named;

    var objUnnamedArgs=objArgs.Unnamed;

    Ìåòîäû è ñâîéñòâà êîëëåêöèé

    WshArguments
    ,
    WshNamed
    è
    WshUnnamed
    ïîäðîáíî îïèñàíû â ãëàâå 1. Îòìåòèì çäåñü òîëüêî, ÷òî äëÿ êîððåêòíîé ðàáîòû ñ ïàðàìåòðàìè êîìàíäíîé ñòðîêè, èìåíà êîòîðûõ ñîäåðæàò ñèìâîëû êèðèëëèöû, ýòè èìåíà â ñöåíàðèè äîëæíû áûòü íàïèñàíû â êîäèðîâêå Windows.

     ëèñòèíãàõ 2.21 è 2.22 ïðèâåäåíû ïðèìåðû ñöåíàðèåâ íà ÿçûêàõ JScript è VBScript, êîòîðûå âûâîäÿò íà ýêðàí îáùåå êîëè÷åñòâî ïàðàìåòðîâ êîìàíäíîé ñòðîêè, êîëè÷åñòâî èìåííûõ è áåçûìÿííûõ àðãóìåíòîâ, à òàêæå çíà÷åíèÿ êàæäîé èç ýòèõ ãðóïï ïàðàìåòðîâ. Ðåçóëüòàò ðàáîòû ýòèõ ñöåíàðèåâ, çàïóùåííûõ â êîíñîëüíîì ðåæèìå, ïðåäñòàâëåí íà ðèñ. 2.8.

    Ðèñ. 2.8. Ðåçóëüòàò ðàáîòû ñöåíàðèÿ Args.js


    Ëèñòèíã 2.21. Äîñòóï ê ïàðàìåòðàì êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ (JScript)

    /********************************************************************/

    /* Èìÿ: Args.js                                                     */

    /* ßçûê: JScript                                                    */

    /* Îïèñàíèå: Ðàáîòà ñ àðãóìåíòàìè çàïóùåííîãî ñöåíàðèÿ              */

    /********************************************************************/

    var

     i,objArgs,s,objNamedArgs,objUnnamedArgs;  //Îáúÿâëÿåì ïåðåìåííûå

    objArgs = WScript.Arguments;  //Ñîçäàåì îáúåêò WshArguments

    //Îïðåäåëÿåì îáùåå êîëè÷åñòâî àðãóìåíòîâ

    s="Âñåãî àðãóìåíòîâ: "+objArgs.Count()+"\n";

    for (i=0; i<=objArgs.Count()-1; i++)

     s+=objArgs(i)+"\n"; //Ôîðìèðóåì ñòðîêè ñî çíà÷åíèÿìè àðãóìåíòîâ

    objUnnamedArgs=objArgs.Unnamed;  //Ñîçäàåì îáúåêò WshUnnamed

    //Îïðåäåëÿåì êîëè÷åñòâî áåçûìÿííûõ àðãóìåíòîâ

    s+="\nÁåçûìÿííûõ àðãóìåíòîâ: "+objUnnamedArgs.length+"\n";

    for (i=0; i<=objUnnamedArgs.length-1; i++)

     //Ôîðìèðóåì ñòðîêè ñî çíà÷åíèÿìè áåçûìÿííûõ àðãóìåíòîâ

     s+=objUnnamedArgs(i)+"\n";

    objNamedArgs=objArgs.Named; //Ñîçäàåì îáúåêò WshNamed

    //Îïðåäåëÿåì êîëè÷åñòâî èìåííûõ àðãóìåíòîâ

    s+="\nÈìåííûõ àðãóìåíòîâ: "+objNamedArgs.length+"\n";

    //Ïðîâåðÿåì, ñóùåñòâóåò ëè àðãóìåíò /Èìÿ:

    if (objNamedArgs.Exists("Èìÿ")) s+=objNamedArgs("Èìÿ")+"\n";

    //Ïðîâåðÿåì, ñóùåñòâóåò ëè àðãóìåíò /Comp:

    if (objNamedArgs.Exists("Comp")) s+=objNamedArgs("Comp")+"\n";

    WScript.Echo(s);  //Âûâîäèì ñôîðìèðîâàííûå ñòðîêè

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.22. Äîñòóï ê ïàðàìåòðàì êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ (VBScript)

    '********************************************************************

    ' Èìÿ: Args.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Ðàáîòà ñ àðãóìåíòàìè çàïóùåííîãî ñöåíàðèÿ

    '********************************************************************

    Option Explicit

    Dim i,Arg,objArgs,s,objNamedArgs,objUnnamedArgs  ' Îáúÿâëÿåì ïåðåìåííûå

    Set objArgs = WScript.Arguments  ' Ñîçäàåì îáúåêò WshArguments

    ' Îïðåäåëÿåì îáùåå êîëè÷åñòâî àðãóìåíòîâ

    s="Âñåãî àðãóìåíòîâ: " & objArgs.Count() & vbCrLf

    For Each Arg In objArgs

     s=s & Arg & vbCrLf  ' Ôîðìèðóåì ñòðîêè ñî çíà÷åíèÿìè àðãóìåíòîâ

    Next

    Set objUnnamedArgs=objArgs.Unnamed  ' Ñîçäàåì îáúåêò WshUnnamed

    ' Îïðåäåëÿåì êîëè÷åñòâî áåçûìÿííûõ àðãóìåíòîâ

    s=s & vbCrLf & "Áåçûìÿííûõ àðãóìåíòîâ: " & objUnnamedArgs.length & vbCrLf

    For Each Arg In objUnnamedArgs

     ' Ôîðìèðóåì ñòðîêè ñî çíà÷åíèÿìè áåçûìÿííûõ àðãóìåíòîâ

     s=s & Arg & vbCrLf

    Next

    Set objNamedArgs=objArgs.Named  ' Ñîçäàåì îáúåêò WshNamed

    ' Îïðåäåëÿåì êîëè÷åñòâî èìåííûõ àðãóìåíòîâ

    s=s & vbCrLf & "Èìåííûõ àðãóìåíòîâ: " & objNamedArgs.Length & vbCrLf

    ' Ïðîâåðÿåì, ñóùåñòâóåò ëè àðãóìåíò /Èìÿ:

    If objNamedArgs.Exists("Èìÿ") Then

     s=s & objNamedArgs("Èìÿ") & vbCrLf

    End If

    ' Ïðîâåðÿåì, ñóùåñòâóåò ëè àðãóìåíò /Comp:

    If objNamedArgs.Exists("Comp") Then

     s=s & objNamedArgs("Comp") & vbCrLf

    End If

    WScript.Echo s   ' Âûâîäèì ñôîðìèðîâàííûå ñòðîêè

    '*************  Êîíåö *********************************************

    Âûõîä èç ñöåíàðèÿ ñ îïðåäåëåííûì êîäîì çàâåðøåíèÿ

    Ëþáîå ïðèëîæåíèå ïðè çàâåðøåíèè ñâîåé ðàáîòû ìîæåò âîçâðàùàòü îïåðàöèîííîé ñèñòåìå öåëîå ÷èñëî — êîä âûõîäà (îáû÷íî íåíóëåâîå çíà÷åíèå ýòîãî êîäà óêàçûâàåò íà òî, ÷òî âûïîëíåíèå ïðîãðàììû ïðåðâàëîñü â ñèëó òîé èëè èíîé îøèáêè).

    Çàìå÷àíèå

    Ñàìà îïåðàöèîííàÿ ñèñòåìà Windows íå ïðîâåðÿåò êîä çàâåðøåíèÿ ïðèëîæåíèé.

    Â WSH êîä âûõîäà èç ñöåíàðèÿ çàäàåòñÿ ñ ïîìîùüþ ïàðàìåòðà ìåòîäà

    Quit
    îáúåêòà
    WScript
    . Â ëèñòèíãàõ 2.23 è 2.24 ïðèâåäåíû ñöåíàðèè, â êîòîðûõ êîä çàâåðøåíèÿ âûáèðàåòñÿ â çàâèñèìîñòè îò òîãî, êàêàÿ êíîïêà íàæàòà â äèàëîãîâîì îêíå (ðèñ. 2.9): êíîïêå OK ñîîòâåòñòâóåò êîä 1, êíîïêå Îòìåíà — êîä 0.

    Ðèñ. 2.9. Äèàëîãîâîå îêíî, ñîçäàâàåìîå â ñöåíàðèè Quit.js


    Ëèñòèíã 2.23. Âûõîä èç ñöåíàðèÿ ñ çàäàííûì êîäîì çàâåðøåíèÿ (JScript)

    /*******************************************************************/

    /* Èìÿ: Quit.js                                                    */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Âûõîä èç ñöåíàðèÿ ñ çàäàííûì êîäîì çàâåðøåíèÿ         */

    /*******************************************************************/

    var WshShell,Res,Text,Title;  //Îáúÿâëÿåì ïåðåìåííûå

    var vbOkCancel=1,vbOk=1;  //Èíèöèàëèçèðóåì êîíñòàíòû äëÿ äèàëîãîâûõ îêîí

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    Text="Âûáåðèòå êíîïêó äëÿ çàâåðøåíèÿ ñöåíàðèÿ";

    Title="Äèàëîãîâîå îêíî";

    //Âûâîäèì äèàëîãîâîå îêíî íà ýêðàí

    Res=WshShell.Popup(Text,0,Title,vbOkCancel);

    if (Res==vbOk) WScript.Quit(1);

    else WScript.Quit(0);

    /*************  Êîíåö *********************************************/

    Ëèñòèír 2.24. Âûõîä èç ñöåíàðèÿ ñ çàäàííûì êîäîì çàâåðøåíèÿ (VBScript)

    '*******************************************************************

    ' Èìÿ: Quit.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Âûõîä èç ñöåíàðèÿ ñ çàäàííûì êîäîì çàâåðøåíèÿ

    '*******************************************************************

    Option Explicit

    Dim WshShell,Res,Text,Title  ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    Text="Âûáåðèòå êíîïêó äëÿ çàâåðøåíèÿ ñöåíàðèÿ"

    Title="Äèàëîãîâîå îêíî"

    ' Âûâîäèì äèàëîãîâîå îêíî íà ýêðàí

    Res=WshShell.Popup(Text,0,Title,vbOkCancel)

    If Res=1 Then

     WScript.Quit 1

    Else

     WScript.Quit 0

    End If

    '*************  Êîíåö *********************************************

    Åñëè ñöåíàðèé çàïóñêàëñÿ ñ ïîìîùüþ êîìàíäíîãî ôàéëà, òî êîä âûõîäà ìîæíî ïðîàíàëèçèðîâàòü ñ ïîìîùüþ îïåðàòîðà

    IF ERRORLEVEL
    .

    Ïðèìåð ïîäîáíîãî ÂÀÒ-ôàéëà ïðèâåäåí â ëèñòèíãå 2.25. Çäåñü ñöåíàðèé Quit.js çàïóñêàåòñÿ ñ ïîìîùüþ êîìàíäû

    START
    ñ êëþ÷îì
    /WAIT
    , óêàçûâàþùèì íà òî, ÷òî âûïîëíåíèå ÂÀÒ-ôàéëà äîëæíî áûòü ïðèîñòàíîâëåíî äî îêîí÷àíèÿ ðàáîòû Quit.js. Ïîñëå ýòîãî, åñëè êîä çàâåðøåíèÿ pàâåí 1 (â äèàëîãîâîì îêíå ñöåíàðèÿ áûëà íàæàòà êíîïêà OK), ïðîèñõîäèò ïåðåõîä ê ìåòêå
    :Ok
    è âûäà÷à ñ ïîìîùüþ êîìàíäû
    ECHO
    ñîîòâåòñòâóþùåãî ñîîáùåíèÿ íà ýêðàí.

    Çàìå÷àíèå

    Äëÿ êîððåêòíîãî îòîáðàæåíèÿ íà ýêðàíå ñèìâîëîâ êèðèëëèöû â BAT-ôàéëàõ äîëæíà èñïîëüçîâàòüñÿ DOS-êîäèðîâêà.

    Åñëè æå êîä çàâåðøåíèÿ ñöåíàðèÿ Quit.js áûë ðàâåí 0 (â äèàëîãîâîì îêíå áûëà íàæàòà êíîïêà Îòìåíà), òî óïðàâëåíèå ïåðåéäåò ê ñòðîêå

    ECHO Äëÿ âûõîäà èç Quit.js áûëà íàæàòà êíîïêà Îòìåíà

    Ëèñòèíã 2.25. Àíàëèç êîäà âûõîäà ñöåíàðèÿ Quit.js (Check.bat)

    @ÅÑÍÎ OFF

    REM **************************************************************

    REM Èìÿ: check.bat

    REM ßçûê: BAT-ôàéë

    REM Êîäèðîâêà: DOS

    REM Îïèñàíèå: Îïðåäåëåíèå êîäà çàâåðøåíèÿ äëÿ ñöåíàðèÿ Quit.js

    REM **************************************************************

    @ÅÑÍO OFF

    ECHO Çàïóñêàåì ñöåíàðèé Quit.js...

    START /W Quit.js

    REM Îïðåäåëÿåì êîä çàâåðøåíèÿ äëÿ ñöåíàðèÿ Quit.js

    IF ERRORLEVEL 1 GOTO :Ok

    ECHO Äëÿ âûõîäà èç Quit.js áûëà íàæàòà êíîïêà Îòìåíà

    GOTO :end

    :Ok

    ECHO Äëÿ âûõîäà èç Quit.js áûëà íàæàòà êíîïêà Ok

    :end

    Èñïîëüçîâàíèå âíåøíèõ îáúåêòîâ àâòîìàòèçàöèè (íà Microsoft Word)

    Äëÿ òîãî ÷òîáû èç ñöåíàðèÿ ïîëó÷èòü äîñòóï ê ñâîéñòâàì èëè ìåòîäàì âíåøíåãî ñåðâåðà àâòîìàòèçàöèè, âíà÷àëå íàäî "ñîçäàòü" ñîîòâåòñòâóþùèé îáúåêò, ò.å. çàãðóçèòü â ïàìÿòü ýêçåìïëÿð íóæíîãî ÑÎÌ-îáúåêòà è ñîõðàíèòü â ïåðåìåííîé ññûëêó íà ýòîò îáúåêò. Íàïîìíèì, ÷òî îáúåêò â ñöåíàðèè ìîæåò ñîçäàâàòüñÿ íåñêîëüêèìè ñïîñîáàìè:

    ? ñ ïîìîùüþ ìåòîäà

    CreateObject
    îáúåêòà
    WScript
    (îáúåêòíàÿ ìîäåëü WSH);

    ? ñ ïîìîùüþ êîíñòðóêöèè

    new ActiveXObject
    (ÿçûê JScript);

    ? ñ ïîìîùüþ ôóíêöèè

    CreateObject
    (ÿçûê VBScript).

     ëþáîì ñëó÷àå â èñïîëüçóåìûé ìåòîä èëè ôóíêöèþ â êà÷åñòâå ïàðàìåòðà ïåðåäàåòñÿ ïðîãðàììíûé èäåíòèôèêàòîð îáúåêòà (ProgID), çàêëþ÷åííûé â ñêîáêè. Ïðèìåð íà ÿçûêå JScript:

    var WA=WScript.CreateObject("Word.Application");

    Òî æå ñàìîå íà VBScript:

    Set WA=WScript.CreateObject("Word.Application")

    Ïåðåä òî÷êîé â ProgID ñòîèò èìÿ áèáëèîòåêè òèïîâ (type library) äëÿ îáúåêòà, êîòîðàÿ ìîæåò ñóùåñòâîâàòü êàê â âèäå îòäåëüíîãî ôàéëà ñ ðàñøèðåíèåì tlb, òàê è â âèäå ÷àñòè ôàéëà ñ èñïîëíÿåìûì êîäîì îáúåêòà (áèáëèîòåêà òèïîâ, ñîäåðæàùàÿ ñâåäåíèÿ î ÑÎÌ-îáúåêòå, ðåãèñòðèðóåòñÿ â ñèñòåìíîì ðååñòðå ïðè óñòàíîâêå ïðèëîæåíèÿ, èñïîëüçóþùåãî ýòîò îáúåêò). Ïîñëå òî÷êè â ProgID óêàçûâàåòñÿ èìÿ êëàññà, ñîäåðæàùåãî ñâîéñòâà è ìåòîäû, äîñòóïíûå äëÿ èñïîëüçîâàíèÿ äðóãèìè ïðèëîæåíèÿìè.

    Âûïîëíÿÿ ìåòîä

    CreateObject
    , èíòåðïðåòàòîð ñöåíàðèÿ ÷åðåç ProgID ïîëó÷àåò èç ñèñòåìíîãî ðååñòðà ïóòü ê ôàéëàì íóæíîé áèáëèîòåêè òèïîâ. Çàòåì ñ ïîìîùüþ ýòîé áèáëèîòåêè â ïàìÿòü çàãðóæàåòñÿ ýêçåìïëÿð çàïðàøèâàåìîãî îáúåêòà, è åãî èíòåðôåéñû ñòàíîâÿòñÿ äîñòóïíûìè äëÿ èñïîëüçîâàíèÿ â ñöåíàðèè. Ññûëêà íà ñîçäàííûé îáúåêò ñîõðàíÿåòñÿ â ïåðåìåííîé; â äàëüíåéøåì, èñïîëüçóÿ ýòó ïåðåìåííóþ, ìû ïîëó÷àåì äîñòóï ê ñâîéñòâàì è ìåòîäàì îáúåêòà, à òàêæå ê åãî âëîæåííûì îáúåêòàì (åñëè îíè èìåþòñÿ).

    Äëÿ ïðèìåðà ðàññìîòðèì, êàêèì îáðàçîì èç ñöåíàðèÿ ìîæíî óïðàâëÿòü ðàáîòîé Microsoft Word, êîòîðûé ÿâëÿåòñÿ ñåðâåðîì àâòîìàòèçàöèè (ëèñòèíãè 2.26 è 2.27).

    Çàìå÷àíèå

    Áîëåå ïîäðîáíî îáúåêòíàÿ ñõåìà Microsoft Word îïèñûâàåòñÿ â ãëàâå 9.

    Ñíà÷àëà ñîçäàåòñÿ ãëàâíûé îáúåêò

    Word.Application
    , êîòîðûé çàïóñêàåò ïðèëîæåíèå Microsoft Word:

    WA=WScript.CreateObject("Word.Application");

    Çàòåì ñîçäàåòñÿ íîâûé ïóñòîé äîêóìåíò, â ðåçóëüòàòå â ïåðåìåííóþ WD çàíîñèòñÿ ññûëêà íà îáúåêò

    Document
    :

    WD=WA.Documents.Add();

    Íàêîíåö, â ïåðåìåííóþ

    Sel
    çàíîñèòñÿ ññûëêà íà îáúåêò
    Selection
    , ñ ïîìîùüþ êîòîðîãî ìîæíî çàäàòü òèï è ðàçìåð øðèôòà, òèï âûðàâíèâàíèÿ àáçàöåâ è íàïå÷àòàòü â äîêóìåíòå ñòðîêè òåêñòà:

    Sel=WA.Selection;

     ðåçóëüòàòå âûïîëíåíèÿ ñöåíàðèåâ PrintInWord.js èëè PrintInWord.vbs â íîâîì äîêóìåíòå Word ïå÷àòàþòñÿ äâå ñòðîêè òåêñòà (ðèñ. 2.10), ïîñëå ÷åãî ñ ïîìîùüþ ìåòîäà

    PrintOut
    îáúåêòà
    Document
    ñîäåðæèìîå äîêóìåíòà âûâîäèòñÿ íà ïðèíòåð:

    WD.PrintOut();

    Ðèñ. 2.10. Ðåçóëüòàò âûïîëíåíèÿ ñöåíàðèåâ PrintInWord.js


    Ëèñòèíã 2.26. Èñïîëüçîâàíèå ñåðâåðà àâòîìàòèçàöèè Microsoft Word (JScript)

    /*******************************************************************/

    /* Èìÿ: PrintInWord.js                                             */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Èñïîëüçîâàíèå èç ñöåíàðèÿ âíåøíåãî îáúåêòà            */

    /*           àâòîìàòèçàöèè (Microsoft Word)                        */

    /*******************************************************************/

    var WA,WD,Sel;  //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò--ïðèëîæåíèå Microsoft Word

    WA=WScript.CreateObject("Word.Application");

    //Ìîæíî áûëî èñïîëüçîâàòü êîíñòðóêöèþ

    //WA=new ActiveXObject("Word.Application");

    WD=WA.Documents.Add();  //Ñîçäàåì íîâûé äîêóìåíò (îáúåêò Document)

    WA.Visible=true;  //Äåëàåì Word âèäèìûì

    Sel=WA.Selection;  //Ñîçäàåì îáúåêò Selection

    Sel.Font.Size=14;  //Óñòàíàâëèâàåì ðàçìåð øðèôòà

    Sel.ParagraphFormat.Alignment=1;  //Âûðàâíèâàíèå ïî öåíòðó

    Sel.Font.Bold=true;  //Óñòàíàâëèâàåì ïîëóæèðíûé øðèôò

    Sel.TypeText("Ïðèâåò!\n"); //Ïå÷àòàåì ñòðîêó òåêñòà

    Sel.Font.Bold=false; //Îòìåíÿåì ïîëóæèðíûé øðèôò

    Sel.ParagraphFormat.Alignment=0;  //Âûðàâíèâàíèå ïî ëåâîìó êðàþ

    //Ïå÷àòàåì ñòðîêó òåêñòà

    Sel.TypeText("Ýòè ñòðîêè íàïå÷àòàíû ñ ïîìîùüþ WSH.");

    WD.PrintOut();   //Âûâîäèì äîêóìåíò íà ïðèíòåð

    /*************  Êîíåö *********************************************/

    Ëèñòèír 2.27. Èñïîëüçîâàíèå ñåðâåðà àâòîìàòèçàöèè Ìiñrîsîft Word (VBScript)

    '*******************************************************************

    ' Èìÿ: PrintInWord.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Èñïîëüçîâàíèå èç ñöåíàðèÿ âíåøíåãî îáúåêòà

    '           àâòîìàòèçàöèè (Microsoft Word)

    '*******************************************************************

    Option Explicit

    Dim WA,WD,Sel  ' Îáúÿâëÿåì ïåðåìåííûå

    'Ñîçäàåì îáúåêò--ïðèëîæåíèå Microsoft Word

    Set WA=WScript.CreateObject("Word.Application")

    ' Ìîæíî áûëî èñïîëüçîâàòü êîíñòðóêöèþ

    ' Set WA=CreateObject("Word.Application")

    Set WD=WA.Documents.Add  'Ñîçäàåì íîâûé äîêóìåíò (îáúåêò Document)

    WA.Visible=true  ' Äåëàåì Word âèäèìûì

    Set Sel=WA.Selection  'Ñîçäàåì îáúåêò Selection

    Sel.Font.Size=14 'Óñòàíàâëèâàåì ðàçìåð øðèôòà

    Sel.ParagraphFormat.Alignment=1  'Âûðàâíèâàíèå ïî öåíòðó

    Sel.Font.Bold=true  'Óñòàíàâëèâàåì ïîëóæèðíûé øðèôò

    Sel.TypeText "Ïðèâåò!" & vbCrLf  'Ïå÷àòàåì ñòðîêó òåêñòà

    Sel.Font.Bold=false  'Îòìåíÿåì ïîëóæèðíûé øðèôò

    Sel.ParagraphFormat.Alignment=0  'Âûðàâíèâàíèå ïî ëåâîìó êðàþ

    'Ïå÷àòàåì ñòðîêó òåêñòà

    Sel.TypeText "Ýòè ñòðîêè íàïå÷àòàíû ñ ïîìîùüþ WSH."

    WD.PrintOut   'Âûâîäèì äîêóìåíò íà ïðèíòåð

    '*************  Êîíåö *********************************************

    Çàïóñê èç ñöåíàðèåâ âíåøíèõ ïðîãðàìì 

    Âíåøíèå ïðîãðàììû è êîìàíäû ìîæíî çàïóñêàòü èç ñöåíàðèåâ ðàçëè÷íûìè ñïîñîáàìè.

    Çàïóñê ïðèëîæåíèé Windows

    Çàïóñòèòü èç ñöåíàðèÿ WSH äðóãîå ïðèëîæåíèå ìîæíî ñ ïîìîùüþ ìåòîäîâ

    Run
    èëè
    Exec
    îáúåêòà
    WshShell
    .

    Ïðè èñïîëüçîâàíèè ìåòîäà

    Run
    äëÿ çàïóñêàåìîãî ïðèëîæåíèÿ ìîæíî çàäàòü òèï îêíà (ïðè óñëîâèè, ÷òî ïðèëîæåíèå ïîääåðæèâàåò ýòîò òèï). Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ ñëåäóþùèõ äâóõ ñòðîê JScript-êîäà:

    var WshShell = WScript.CreateObject("WScript.Shell");

    WshShell.Run("notepad", 3);

    ïðîãðàììà Áëîêíîò (notepad.exe) áóäåò çàïóùåíà â ìàêñèìèçèðîâàííîì (ðàñïàõíóòîì íà âåñü ýêðàí) îêíå (ñïèñîê âñåõ âîçìîæíûõ çíà÷åíèé ïàðàìåòðîâ ìåòîäà

    Run
    ïðèâåäåí â òàáë. 1.13).

    Çàìå÷àíèå

    Ìåòîä

    Run
    âñåãäà ñîçäàåò íîâûé ýêçåìïëÿð çàïóñêàåìîãî ïðîöåññà, ñ åãî ïîìîùüþ íåëüçÿ íè ïîâòîðíî àêòèâèçèðîâàòü îêíî çàïóùåííîãî ïðèëîæåíèÿ (äëÿ ýòîãî èñïîëüçóåòñÿ ìåòîä
    AppActivate
    ), íè ñâåðíóòü èëè ðàçâåðíóòü åãî.

    Äðóãèì âàðèàíòîì çàïóñêà èç ñöåíàðèÿ ïðèëîæåíèÿ Windows ÿâëÿåòñÿ ïðèìåíåíèå ìåòîäà

    Exec
    . Ýòîò ìåòîä çàïóñêàåò ïðèëîæåíèå, ïóòü ê êîòîðîìó óêàçàí êàê ïàðàìåòð ìåòîäà, è âîçâðàùàåò îáúåêò
    WshScriptExec
    .

    Íàïðèìåð:

    var WshShell = WScript.CreateObject("WScript.Shell");

    var theNotepad = WshShell.Exec("calc");

    Çàìå÷àíèå

    Ïðè ïîäîáíîì çàïóñêå ïðèëîæåíèÿ, â îòëè÷èå îò ìåòîäà

    Run
    , íåëüçÿ çàäàòü òèï îêíà.

    Îáúåêò

    WshScriptExec
    ïîçâîëÿåò êîíòðîëèðîâàòü õîä âûïîëíåíèÿ çàïóùåííîãî ïðèëîæåíèÿ ñ ïîìîùüþ ñâîéñòâà
    Status
    — åñëè
    Status
    ðàâåí 0, òî ïðèëîæåíèå âûïîëíÿåòñÿ, åñëè
    Status
    ðàâåí 1, òî ïðèëîæåíèå çàâåðøåíî. Êðîìå ýòîãî, èñïîëüçóÿ ìåòîä
    Terminate
    , ìîæíî ïðèíóäèòåëüíî çàâåðøèòü ðàáîòó òîãî ïðèëîæåíèÿ, êîòîðîìó ñîîòâåòñòâóåò îáúåêò
    WshScriptExec
    .

    Â ëèñòèíãå 2.28 ïðèâåäåí ñöåíàðèé íà ÿçûêå JScript, â êîòîðîì ñ ïîìîùüþ ìåòîäà Exec çàïóñêàåòñÿ Áëîêíîò (notepad.exe); ññûëêà íà ñîîòâåòñòâóþùèé îáúåêò

    WshScriptExec
    ñîõðàíÿåòñÿ â ïåðåìåííîé
    theNotepad
    :

    theNotepad = WshShell.Exec("notepad");

    Ïîñëå ýòîãî âûïîëíåíèå ñöåíàðèÿ ïðèîñòàíàâëèâàåòñÿ íà 1 ñåêóíäó (ïàóçà íåîáõîäèìà äëÿ òîãî, ÷òîáû îêíî Áëîêíîòà óñïåëî ïîÿâèòüñÿ íà ýêðàíå), ïîñëå ÷åãî âûâîäèòñÿ äèàëîãîâîå îêíî ñ èíôîðìàöèåé î ñòàòóñå çàïóùåííîãî ïðèëîæåíèÿ è âîïðîñîì î íåîáõîäèìîñòè çàêðûòèÿ Áëîêíîòà (ðèñ. 2.11):

    WScript.Sleep(1000);

    Text="Áëîêíîò çàïóùåí(Status="+theNotepad.Status+")\nÇàêðûòü Áëîêíîò?";

    Title="";

    Res=WshShell.Popup(Text, 0, Title, vbQuestion+vbYesNo);

    Ðèñ. 2.11. Äèàëîãîâîå îêíî, ôîðìèðóåìîå â ñöåíàðèè ExecWinApp.js


     ñëó÷àå óòâåðäèòåëüíîãî îòâåòà ïðîèñõîäèò çàêðûòèå Áëîêíîòà ñ ïîìîùüþ ìåòîäà Terminate:

    if (Res==vbYes) {

     theNotepad.Terminate();

     WScript.Sleep(100);

     WScript.Echo("Áëîêíîò çàêðûò (Status="+theNotepad.Status+")");

    }

    Ëèñòèíã 2.28. Çàïóñê è ïðèíóäèòåëüíîå çàêðûòèå ïðèëîæåíèÿ (JScript)

    /*******************************************************************/

    /* Èìÿ: ExecWinApp.js                                              */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Çàïóñê è çàêðûòèå ïðèëîæåíèÿ (îáúåêò WshScriptExec)   */

    /*******************************************************************/

    var WshShell,theNotepad,Res,Text,Title;  //Îáúÿâëÿåì ïåðåìåííûå

    //Èíèöèàëèçèðóåì êîíñòàíòû äëÿ äèàëîãîâûõ îêîí

    var vbYesNo=4,vbQuestion=32,vbYes=6,vbNo=7;

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    WScript.Echo("Çàïóñêàåì Áëîêíîò");

    //Çàïóñêàåì ïðèëîæåíèå (ñîçäàåì îáúåêò WshScriptExec)

    theNotepad = WshShell.Exec("notepad"); 

    WScript.Sleep(1000);  //Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ

    Text="Áëîêíîò çàïóùåí (Status="+theNotepad.Status+")\nÇàêðûòü Áëîêíîò?";

    Title="";

    //Âûâîäèì äèàëîãîâîå îêíî íà ýêðàí

    Res=WshShell.Popup(Text,0,Title,vbQuestion+vbYesNo);

    //Îïðåäåëÿåì, êàêàÿ êíîïêà íàæàòà â äèàëîãîâîì îêíå

    if (Res==vbYes) {

     theNotepad.Terminate();  //Ïðåðûâàåì ðàáîòó Áëîêíîòà

     //Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ äëÿ òîãî, ÷òîáû Áëîêíîò

     //óñïåë çàêðûòüñÿ

     WScript.Sleep(100);

     WScript.Echo("Áëîêíîò çàêðûò (Status="+theNotepad.Status+")");

    }

    /*************  Êîíåö *********************************************/

    Òîò æå ñàìûé ïðèìåð íà ÿçûêå VBScript ïðèâåäåí â ëèñòèíãå 2.29.

    Ëèñòèír 2.29. Çàïóñê è ïðèíóäèòåëüíîå çàêðûòèå ïðèëîæåíèÿ (VBScript)

    '*******************************************************************

    ' Èìÿ: ExecWinApp.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Çàïóñê è çàêðûòèå ïðèëîæåíèå (îáúåêò WshScriptExec)

    '*******************************************************************

    Option Explicit

    Dim WshShell,theNotepad,Res,Text,Title   ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    WScript.Echo "Çàïóñêàåì Áëîêíîò"

    ' Çàïóñêàåì ïðèëîæåíèå (ñîçäàåì îáúåêò WshScriptExec)

    Set theNotepad = WshShell.Exec("notepad")

    WScript.Sleep 500   ' Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ

    Text="Áëîêíîò çàïóùåí (Status=" & theNotepad.Status & ")" & vbCrLf _

     & "Çàêðûòü Áëîêíîò?"

    Title=""

    ' Âûâîäèì äèàëîãîâîå îêíî íà ýêðàí

    Res=WshShell.Popup(Text,0,Title,vbQuestion+vbYesNo)

    ' Îïðåäåëÿåì, êàêàÿ êíîïêà íàæàòà â äèàëîãîâîì îêíå

    If Res=vbYes Then

     theNotepad.Terminate ' Ïðåðûâàåì ðàáîòó Áëîêíîòà

     ' Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ äëÿ òîãî, ÷òîáû Áëîêíîò

     ' óñïåë çàêðûòüñÿ

     WScript.Sleep 100

     WScript.Echo "Áëîêíîò çàêðûò (Status=" & theNotepad.Status & ")"

    End If

    '*************  Êîíåö *********************************************/

    Ïåðåêëþ÷åíèå ìåæäó ïðèëîæåíèÿìè, èìèòàöèÿ íàæàòèé êëàâèø

    Ïðîèçâîäèòü ïåðåêëþ÷åíèå ìåæäó îêíàìè íåñêîëüêèõ çàïóùåííûõ ïðèëîæåíèé ïîçâîëÿåò ìåòîä

    AppActivate
    îáúåêòà
    WshScript
    .  êà÷åñòâå àðãóìåíòà ýòîãî ìåòîäà íóæíî óêàçûâàòü ëèáî çàãîëîâîê àêòèâèçèðóåìîãî îêíà, ëèáî ïðîãðàììíûé èäåíòèôèêàòîð (PID) ïðîöåññà, êîòîðûé çàïóùåí â ýòîì îêíå. Ïðåäïî÷òèòåëüíûì ÿâëÿåòñÿ èñïîëüçîâàíèå PID, êîòîðûé ìîæíî ïîëó÷èòü ñ ïîìîùüþ ñâîéñòâà
    ProcessID
    îáúåêòà
    WshScriptExec
    , ñîîòâåòñòâóþùåãî àêòèâèçèðóåìîìó ïðèëîæåíèþ. Íåäîñòàòêè ïðèìåíåíèÿ â ìåòîäå
    AppActivate
    çàãîëîâêà îêíà:

    ? ïðè íàïèñàíèè ñöåíàðèÿ íåîáõîäèìî çíàòü òî÷íîå íàçâàíèå çàãîëîâêà;

    ? ñàìî ïðèëîæåíèå ìîæåò èçìåíèòü òåêñò â çàãîëîâêå îêíà;

    ? â ñëó÷àå íåñêîëüêèõ îêîí ñ îäèíàêîâûìè çàãîëîâêàìè

    AppActivate
    âñåãäà áóäåò àêòèâèçèðîâàòü îäèí è òîò æå ýêçåìïëÿð, äîñòóï ê äðóãèì îêíàì ïîëó÷èòü íå óäàñòñÿ.

    Àêòèâèçèðîâàâ òî èëè èíîå îêíî, â êîòîðîì âûïîëíÿåòñÿ ïðèëîæåíèå Windows, ìîæíî èç ñöåíàðèÿ ñûìèòèðîâàòü íàæàòèÿ êëàâèø â ýòîì îêíå. Äëÿ ýòîãî èñïîëüçóåòñÿ ìåòîä

    SendKeys
    îáúåêòà
    WshShell
    (ïîäðîáíîå îïèñàíèå ýòîãî ìåòîäà ïðèâåäåíî â ãëàâå 1).

    Çàìå÷àíèå

    Äëÿ íîðìàëüíîé ðàáîòû ìåòîäà

    SendKeys
    íåîáõîäèìî, ÷òîáû ÿçûêîì ïî óìîë÷àíèþ â îïåðàöèîííîé ñèñòåìå áûë íàçíà÷åí àíãëèéñêèé ÿçûê.

    Ðàññìîòðèì ïðèìåð ñöåíàðèÿ Run&ExecWinApp.js (ëèñòèíã 2.30), â êîòîðîì çàïóñêàåòñÿ Êàëüêóëÿòîð (calc.exe), è â åãî îêíî ñ ïîìîùüþ

    SendKeys
    ïîñëåäîâàòåëüíî ïîñûëàþòñÿ íàæàòèÿ êëàâèø <1>, <+>, <2> è <Enter>:

    theCalculator = WshShell.Exec("calc");

    WScript.Sleep(1000);

    WshShell.AppActivate(theCalculator.ProcessID);

    WshShell.SendKeys("1{+}");

    WshShell.SendKeys("2");

    WshShell.SendKeys("~"); //Êëàâèøà <Enter>

    Çàòåì âûïîëíåíèå ñöåíàðèÿ ïðèîñòàíàâëèâàåòñÿ íà 1 ñåêóíäó, ÷òîáû ðåçóëüòàò âû÷èñëåíèé áûë âèäåí íà ýêðàíå:

    WScript.Sleep(1000);

    ïîñëå ÷åãî ðåçóëüòàò âû÷èñëåíèé (ñèìâîë "3") êîïèðóåòñÿ â áóôåð ñ ïîìîùüþ "íàæàòèÿ" êëàâèø <Ctrl>+<C>:

    WshShell.SendKeys ("^c");

    Ïîñëå ýòîãî íà ýêðàí âûâîäèòñÿ ñîîáùåíèå î òîì, ÷òî Êàëüêóëÿòîð áóäåò çàêðûò:

    WScript.Echo("Çàêðûâàåì êàëüêóëÿòîð");

    â ðåçóëüòàòå ÷åãî îêíî Êàëüêóëÿòîðà òåðÿåò ôîêóñ. Äëÿ òîãî ÷òîáû âíîâü àêòèâèçèðîâàòü ýòî îêíî, èñïîëüçóåòñÿ ìåòîä AppActivate, ïàðàìåòðîì êîòîðîãî ñëóæèò PID Êàëüêóëÿòîðà:

    WshShell.AppActivate(theCalculator.ProcessID);

    Äëÿ òîãî ÷òîáû çàêðûòü îêíî Êàëüêóëÿòîðà, â íåãî ïîñûëàþòñÿ íàæàòèÿ êëàâèø <Alt>+<F4>:

    WshShell.SendKeys("%{F4}");

    Ïîñëå çàêðûòèÿ Êàëüêóëÿòîðà çàïóñêàåòñÿ Áëîêíîò (notepad.exe) è â íåãî çàïèñûâàþòñÿ ðåçóëüòàòû ðàáîòû Êàëüêóëÿòîðà (âñòàâêà èç áóôåðà âû÷èñëåííîé ñóììû ïðîèçâîäèòñÿ ñ ïîìîùüþ íàæàòèé <Ctrl>+<V>):

    WshShell.Run("notepad");

    WScript.Sleep(1000);

    WshShell.AppActivate("notepad");

    WshShell.SendKeys("l{+}2=");

    WshShell.SendKeys("^v");

    WshShell.SendKeys(" {(}ñ{)} Calculator");

    Â ðåçóëüòàòå â Áëîêíîòå îòîáðàæàåòñÿ òåêñò, ïîêàçàííûé íà ðèñ. 2.12.

    Ðèñ. 2.12. Ðåçóëüòàò ðàáîòû ñöåíàðèÿ Run&ExecWinApp.js


    Ëèñòèíã 2.30. Çàïóñê äâóõ ïðèëîæåíèé è îáìåí äàííûìè ìåæäó íèìè (JScript)

    /*******************************************************************/

    /* Èìÿ: Run&ExecWinApp.js                                          */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Çàïóñê äâóõ ïðèëîæåíèé è îáìåí äàííûìè ìåæäó íèìè     */

    /*******************************************************************/

    var WshShell, theCalculator;  //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    WScript.Echo("Çàïóñêàåì êàëüêóëÿòîð è\n ñ÷èòàåì 1+2");

    //Ñîçäàåì îáúåêò WshScript (çàïóñêàåì Êàëüêóëÿòîð)

    theCalculator = WshShell.Exec("calc");

    //Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ, äëÿ òîãî, ÷òîáû

    //îêíî Êàëüêóëÿòîðà óñïåëî ïîÿâèòüñÿ íà ýêðàíå

    WScript.Sleep(1000);

    //Àêòèâèçèðóåì îêíî Êàëüêóëÿòîðà

    WshShell.AppActivate(theCalculator.ProcessID);

    //Ïîñûëàåì íàæàòèÿ êëàâèø â îêíî Êàëüêóëÿòîðà

    WshShell.SendKeys("1{+}");

    WshShell.SendKeys("2");

    WshShell.SendKeys("~");  //Êëàâèøà <Enter>

    WScript.Sleep(1000);

    //Êîïèðóåì ðåçóëüòàò âû÷èñëåíèÿ â áóôåð Windows (<Ctrl>+C)

    WshShell.SendKeys("^c");

    //Âûâîäèì ñîîáùåíèå (àêòèâíîå îêíî ìåíÿåòñÿ)

    WScript.Echo("Çàêðûâàåì êàëüêóëÿòîð");

    //Àêòèâèçèðóåì îêíî Êàëüêóëÿòîðà

    WshShell.AppActivate(theCalculator.ProcessID);

    //Çàêðûâàåì îêíî Êàëüêóëÿòîðà (<Alt>+<F4>)

    WshShell.SendKeys("%{F4}");

    WScript.Echo("Çàïóñêàåì Áëîêíîò è êîïèðóåì òóäà ðåçóëüòàò");

    WshShell.Run("notepad"); //Çàïóñêàåì Áëîêíîò

    //Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ, äëÿ òîãî, ÷òîáû

    //îêíî Áëîêíîòà óñïåëî ïîÿâèòüñÿ íà ýêðàíå

    WScript.Sleep(1000);

    WshShell.AppActivate("notepad"); //Àêòèâèçèðóåì îêíî Áëîêíîòà

    //Ïîñûëàåì íàæàòèÿ êëàâèø â îêíî Áëîêíîòà

    WshShell.SendKeys("1{+}2=");

    //Âñòàâëÿåì ñîäåðæèìîå áóôåðà Windows (<Ctrl>+V)

    WshShell.SendKeys("^v");

    //Âûâîäèì â îêíî Áëîêíîòà îñòàâøóþñÿ èíôîðìàöèþ

    WshShell.SendKeys(" {(}c{)} Calculator");

    /*************  Êîíåö *********************************************/

    Òîò æå ïðèìåð, ðåàëèçîâàííûé â âèäå VBScript-ñöåíàðèÿ, ïðèâåäåí â ëèñòèíãå 2.31.

    Ëèñòèíã 2.31. Çàïóñê äâóõ ïðèëîæåíèé è îáìåí äàííûìè ìåæäó íèìè (VBScript)

    '*******************************************************************

    ' Èìÿ: Run&ExecWinApp.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Çàïóñê äâóõ ïðèëîæåíèé è îáìåí äàííûìè ìåæäó íèìè

    '*******************************************************************

    Option Explicit

    Dim WshShell, theCalculator  ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    WScript.Echo("Çàïóñêàåì êàëüêóëÿòîð è" & vbCrLf & "ñ÷èòàåì 1+2")

    ' Ñîçäàåì îáúåêò WshScript (çàïóñêàåì Êàëüêóëÿòîð)

    Set theCalculator = WshShell.Exec("calc")

    ' Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ, äëÿ òîãî, ÷òîáû

    ' îêíî Êàëüêóëÿòîðà óñïåëî ïîÿâèòüñÿ íà ýêðàíå

    WScript.Sleep 500

    ' Àêòèâèçèðóåì îêíî Êàëüêóëÿòîðà

    WshShell.AppActivate theCalculator.ProcessID

    ' Ïîñûëàåì íàæàòèÿ êëàâèø â îêíî Êàëüêóëÿòîðà

    WshShell.SendKeys "1{+}"

    WshShell.SendKeys "2"

    WshShell.SendKeys "~"    ' Êëàâèøà <Enter>

    WScript.Sleep 500

    ' Êîïèðóåì ðåçóëüòàò âû÷èñëåíèÿ â áóôåð Windows (<Ctrl>+C)

    WshShell.SendKeys "^c"

    ' Âûâîäèì ñîîáùåíèå (àêòèâíîå îêíî ìåíÿåòñÿ)

    WScript.Echo "Çàêðûâàåì êàëüêóëÿòîð"

    ' Àêòèâèçèðóåì îêíî Êàëüêóëÿòîðà

    WshShell.AppActivate theCalculator.ProcessID

    ' Çàêðûâàåì îêíî Êàëüêóëÿòîðà (<Alt>+<F4>)

    WshShell.SendKeys "%{F4}"

    WScript.Echo "Çàïóñêàåì Áëîêíîò è êîïèðóåì òóäà ðåçóëüòàò"

    WshShell.Run "notepad"     ' Çàïóñêàåì Áëîêíîò

    ' Ïðèîñòàíàâëèâàåì âûïîëíåíèå ñöåíàðèÿ, äëÿ òîãî, ÷òîáû

    ' îêíî Áëîêíîòà óñïåëî ïîÿâèòüñÿ íà ýêðàíå

    WScript.Sleep 1000

    WshShell.AppActivate "notepad"    ' Àêòèâèçèðóåì îêíî Áëîêíîòà

    ' Ïîñûëàåì íàæàòèÿ êëàâèø â îêíî Áëîêíîòà

    WshShell.SendKeys "1{+}2="

    ' Âñòàâëÿåì ñîäåðæèìîå áóôåðà Windows (<Ctrl>+V)

    WshShell.SendKeys "^v"

    ' Âûâîäèì â îêíî Áëîêíîòà îñòàâøóþñÿ èíôîðìàöèþ

    WshShell.SendKeys " {(}c{)} Calculator"

    '*************  Êîíåö *********************************************
     

    Çàïóñê íåçàâèñèìûõ êîíñîëüíûõ ïðèëîæåíèé è êîìàíä DOS

    Äëÿ çàïóñêà íåçàâèñèìûõ, ò.å. ðàáîòàþùèõ â îòäåëüíîì àäðåñíîì ïðîñòðàíñòâå è èñïîëüçóþùèõ ñâîþ êîïèþ ïåðåìåííûõ ñðåäû, êîíñîëüíûõ ïðèëîæåíèé èëè âíåøíèõ (ïðåäñòàâëåííûõ èñïîëíÿåìûìè ôàéëàìè íà æåñòêîì äèñêå) êîìàíä DOS èñïîëüçóåòñÿ ìåòîä

    Run
    îáúåêòà
    WshShell
    . Ïðè ýòîì âûïîëíåíèå ñöåíàðèÿ ìîæíî ïðèîñòàíîâèòü äî îêîí÷àíèÿ ðàáîòû çàïóùåííîãî ïðèëîæåíèÿ, à çàòåì ïðîàíàëèçèðîâàòü êîä âûõîäà ýòîãî ïðèëîæåíèÿ (äëÿ ýòîãî òðåòèé ïàðàìåòð ìåòîäà
    Run
    äîëæåí ðàâíÿòüñÿ
    true
    ). Ñîîòâåòñòâóþùèå ïðèìåðû ñöåíàðèåâ íà ÿçûêàõ JScript è VBScript ïðèâåäåíû â ëèñòèíãàõ 2.32 è 2.33 ñîîòâåòñòâåííî.

    Ëèñòèíã 2.32. Çàïóñê íåçàâèñèìîãî êîíñîëüíîãî ïðèëîæåíèÿ (JScript)

    /*******************************************************************/

    /* Èìÿ: RunConApp.js                                               */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Çàïóñê íåçàâèñèìîãî êîíñîëüíîãî ïðèëîæåíèÿ è          */

    /*           îïðåäåëåíèå åãî êîäà âûõîäà                           */

    /*******************************************************************/

    var WshShell, Code;  //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    //Çàïóñêàåì óòèëèòó xcopy ñ êëþ÷îì "/?" è îæèäàåì îêîí÷àíèÿ åå ðàáîòû

    Code=WshShell.Run("xcopy /?",1,true);

    //Ïå÷àòàåì ïîëó÷åííûé êîä âîçâðàòà

    WScript.Echo("Êîä âîçâðàòà: ", Code);

    /*************  Êîíåö *********************************************/

    Ëèñòèír 2.33. Çàïóñê íåçàâèñèìîãî êîíñîëüíîãî ïðèëîæåíèÿ (VBSñript)

    '*******************************************************************

    ' Èìÿ: RunConApp.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Çàïóñê íåçàâèñèìîãî êîíñîëüíîãî ïðèëîæåíèÿ è

    '           îïðåäåëåíèå åãî êîäà âûõîäà

    '*******************************************************************

    Option Explicit

    Dim WshShell, Code   ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    ' Çàïóñêàåì óòèëèòó xcopy ñ êëþ÷îì "/?" è îæèäàåì îêîí÷àíèÿ åå ðàáîòû

    Code=WshShell.Run("xcopy /?",1,true)

    ' Ïå÷àòàåì ïîëó÷åííûé êîä âîçâðàòà

    WScript.Echo "Êîä âîçâðàòà: ", Code

    '*************  Êîíåö *********************************************/

    Äëÿ âûïîëíåíèÿ âíóòðåííåé êîìàíäû DOS íóæíî çàïóñòèòü êîìàíäíûé èíòåðïðåòàòîð (â Windows NT/2000/XP ýòî ôàéë cmd.exe, â Windows9õ — command.com) è ïåðåäàòü åìó â êà÷åñòâå ïàðàìåòðà íóæíóþ êîìàíäó. Äëÿ òîãî ÷òîáû ïðè âûçîâå êîìàíäíîãî èíòåðïðåòàòîðà íå çàáîòèòüñÿ î ïîëíîì ïóòè ê cmd.exe, íóæíî èñïîëüçîâàòü ïåðåìåííóþ ñðåäû

    COMSPEC
    .

    Çàìå÷àíèå

    Äëÿ ïîëó÷åíèÿ çíà÷åíèÿ ïåðåìåííîé ñðåäû åå èìÿ íóæíî îêðóæèòü çíàêàìè "%" (íàïðèìåð,

    %COMSPEC%
    ).

    Â ëèñòèíãàõ 2.34 è 2.35 ïðèâåäåíû ñöåíàðèè íà ÿçûêàõ JScript è VBScript, â êîòîðûõ çàïóñêàþòñÿ âíóòðåííèå êîìàíäû

    COPY /?
    (âûçîâ âñòðîåííîé ñïðàâêè äëÿ ñîðó) è
    DIR %WINDIR%
    (âûâîä ñîäåðæèìîãî ñèñòåìíîãî êàòàëîãà Windows).

    Ïðè ýòîì îêíî, â êîòîðîì âûïîëíÿåòñÿ êîìàíäà

    COPY /?
    , íå çàêðûâàåòñÿ ïîñëå çàâåðøåíèÿ ýòîé êîìàíäû, ò.ê. ïðè çàïóñêå êîìàíäíîãî èíòåðïðåòàòîðà áûë óêàçàí êëþ÷ /k, à èíôîðìàöèÿ, âûâîäèìàÿ êîìàíäîé DIR %WINDIR%, ïåðåíàïðàâëÿåòñÿ â ôàéë windir.txt, ïîñëå ÷åãî êîìàíäíîå îêíî çàêðûâàåòñÿ, ò.ê. äëÿ êîìàíäíîãî èíòåðïðåòàòîðà â ýòîì ñëó÷àå áûë óêàçàí êëþ÷
    /ñ
    .

    Ëèñòèíã 2.34. Äîñòóï ê ïàðàìåòðàì êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ (JScript)

    /*******************************************************************/

    /* Èìÿ: RunDOSCom.js                                               */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Âûïîëíåíèå âíóòðåííèõ êîìàíä DOS                      */

    /*******************************************************************/

    var WshShell, Code; //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    //Çàïóñêàåì âíóòðåííþþ êîìàíäó COPY

    WshShell.Run("%COMSPEC% /k copy /?",1);

    //Çàïóñêàåì âíóòðåííþþ êîìàíäó DIR

    WshShell.Run("%COMSPEC% /c dir %WINDIR% > windir.txt",1);

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.35. Äîñòóï ê ïàðàìåòðàì êîìàíäíîé ñòðîêè çàïóùåííîãî ñöåíàðèÿ (VBScript)

    '*******************************************************************

    ' Èìÿ: RunDOSCom.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Âûïîëíåíèå âíóòðåííèõ êîìàíä DOS

    '*******************************************************************

    Option Explicit

    Dim WshShell, Code   ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    ' Çàïóñêàåì âíóòðåííþþ êîìàíäó COPY

    WshShell.Run "%COMSPEC% /k copy /?",1

    ' Çàïóñêàåì âíóòðåííþþ êîìàíäó DIR

    WshShell.Run "%COMSPEC% /c dir %WINDIR% > windir.txt",1

    '*************  Êîíåö *********************************************/

    Çàïóñê äî÷åðíèõ êîíñîëüíûõ ïðèëîæåíèé è êîìàíä DOS, èñïîëüçîâàíèå èõ âõîäíûõ è âûõîäíûõ ïîòîêîâ

    Êîíñîëüíîå ïðèëîæåíèå èëè êîìàíäó DOS ìîæíî çàïóñòèòü èç ñöåíàðèÿ êàê äî÷åðíþþ çàäà÷ó, ò.å. ñ òåìè æå ïåðåìåííûìè ñðåäû, ÷òî ó ïðîöåññà-ðîäèòåëÿ. Ïðè ýòîì èíôîðìàöèÿ, âûâîäèìàÿ äî÷åðíèì ïðîöåññîì, íà ýêðàí äóáëèðîâàòüñÿ íå áóäåò, îäíàêî èç ðîäèòåëüñêîãî ñöåíàðèÿ ìîæíî ñ÷èòûâàòü èíôîðìàöèþ èç âûõîäíîãî ïîòîêà è ïîñûëàòü äàííûå âî âõîäíîé ïîòîê äî÷åðíåé çàäà÷è (ýòî íàïîìèíàåò êîíâåéåðèçàöèþ êîìàíä DOS, ïðè êîòîðîé äàííûå âûõîäíîãî ïîòîêà îäíîé êîìàíäû ïîñòóïàþò âî âõîäíîé ïîòîê äðóãîé êîìàíäû, íàïðèìåð

    DIR | MORE
    ). Òàêèì îáðàçîì, èç ñöåíàðèÿ ìîæíî çàïóñêàòü òó èëè èíóþ óòèëèòó êîìàíäíîé ñòðîêè è îáðàáàòûâàòü âûâîäèìûå åé äàííûå; èíîãäà òàêèì îáðàçîì ïîëó÷èòü íóæíóþ èíôîðìàöèþ áûâàåò ïðîùå è áûñòðåå, ÷åì ïðè èñïîëüçîâàíèè îáúåêòíîé ìîäåëè WSH èëè äðóãîãî ñåðâåðà àâòîìàòèçàöèè.

     êà÷åñòâå ïðèìåðà ðàññìîòðèì ñöåíàðèé ExecConApp.js (ëèñòèíã 2.36), êîòîðûé âûâîäèò íà ýêðàí îáùåå êîëè÷åñòâî ôàéëîâ â òåêóùåì êàòàëîãå è èõ èìåíà (ðèñ. 2.13).

    Ðèñ. 2.13. Ðåçóëüòàò âûïîëíåíèÿ ñöåíàðèÿ ExecConApp.js


    Êàê íåòðóäíî çàìåòèòü, èìåíà ôàéëîâ âûâîäÿòñÿ íà ýêðàí â òîì æå âèäå, ÷òî è ïðè èñïîëüçîâàíèè êîìàíäû

    DIR /B
    (ðèñ. 2.14).

    Òàêèì îáðàçîì, äëÿ ïîëó÷åíèÿ íóæíîé èíôîðìàöèè íåîáõîäèìî çàïóñòèòü â êà÷åñòâå äî÷åðíåãî ïðîöåññà êîìàíäó

    DIR
    ñ êëþ÷îì
    /B
    :

    ObjExec=WshShell.Exec("%COMSPEC% /ñ dir /b");

    è ïîëíîñòüþ ñ÷èòàòü äàííûå, ïîÿâëÿþùèåñÿ â âûõîäíîì ïîòîêå ýòîãî ïðîöåññà. Äëÿ ýòîãî â öèêëå âûçûâàåòñÿ ìåòîä ReadAll, ñ÷èòûâàþùèé âñþ èíôîðìàöèþ, èìåþùóþñÿ ê òîìó âðåìåíè â ïîòîêå StdOut îáúåêòà ObjExec â ïåðåìåííóþ s:

    IsBreak=false;

    for (;;) { //Áåñêîíå÷íûé öèêë

     //Ïðîâåðÿåì, äîñòèãíóò ëè êîíåö âûõîäíîãî ïîòîêà êîìàíäû DIR

     if (!ObjExec.StdOut.AtEndOfStream)

      //Ñ÷èòûâàåì ïîëíîñòüþ âûõîäíîé ïîòîê êîìàíäû DIR

      s+=ObjExec.StdOut.ReadAll();

     if (IsBreak) break; //Âûõîäèì èç öèêëà

     if (ObjExec.Status==1) //Ïðîâåðÿåì, íå çàâåðøèëîñü ëè âûïîëíåíèå DIR

      IsBreak=true;

     else WScript.Sleep(100); //Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê

    }

    Ðèñ. 2.14. Ðåçóëüòàò âûïîëíåíèÿ êîìàíäû

    DIR /B


    Ðîäèòåëüñêèé è äî÷åðíèé ïðîöåññû ðàáîòàþò àñèíõðîííî, ïîýòîìó ïîêà êîìàíäà

    DIR
    íå ïåðåñòàíåò âûäàâàòü äàííûå, ò.å. ïîêà ñâîéñòâî
    Status
    îáúåêòà
    ObjExec
    íå ñòàíåò ðàâíûì 1, âûïîëíåíèå ñöåíàðèÿ ñ ïîìîùüþ ìåòîäà
    WScript.Sleep
    ïåðèîäè÷åñêè ïðèîñòàíàâëèâàåòñÿ íà 0,1 ñåêóíäû.

    Ïîñëå òîãî êàê ñ÷èòàíû âñå äàííûå èç âûõîäíîãî ïîòîêà êîìàíäû

    DIR
    (ñâîéñòâî
    ObjExec.StdOut.AtEndOfStream
    ðàâíî
    true
    ), ïðîèñõîäèò âûõîä èç öèêëà è ôîðìèðîâàíèå èç ïåðåìåííîé s ìàññèâà âûâåäåííûõ ñòðîê:

    ArrS=s.split("\n");

    Ïîñëå ýòîãî òîëüêî îñòàåòñÿ ïîäñ÷èòàòü êîëè÷åñòâî ôàéëîâ â êàòàëîãå, êîòîðîå íà åäèíèöó ìåíüøå êîëè÷åñòâà ñòðîê â ìàññèâå

    ArrS
    :

    ColFiles=ArrS.length-1;

    è âûâåñòè íóæíûå ñòðîêè íà ýêðàí:

    WScript.StdOut.WriteLine("Âñåãî ôàéëîâ â òåêóùåì êàòàëîãå: "+ColFiles);

    for (i=0;i<=ColFiles-1; i++ )

     WScript.StdOut.WriteLine(ArrS[i]); //Âûâîäèì ñòðîêè íà ýêðàí

    Çàìå÷àíèå

     äî÷åðíåì êîíñîëüíîì ïðèëîæåíèè âûâîä ñòðîê â âûõîäíîé ïîòîê ïðîèñõîäèò â DOS-êîäèðîâêå, ïîýòîìó ïðè íàëè÷èè ñèìâîëîâ êèðèëëèöû ýòè ñòðîêè íóæíî ïðåîáðàçîâûâàòü â êîäèðîâêó Windows (ïðèìåðû ñîîòâåòñòâóþùèõ ôóíêöèé êîíâåðòàöèè íà ÿçûêàõ JScript è VBScript ïðèâåäåíû â ëèñòèíãàõ 2.14 è 2.15).

    Ëèñòèíã 2.36. Çàïóñê äî÷åðíåãî êîíñîëüíîãî ïðèëîæåíèÿ (JScript)

    /*******************************************************************/

    /* Èìÿ: ExecConApp.js                                              */

    /* ßçûê: JScript                                                   */

    /* Îïèñàíèå: Çàïóñê äî÷åðíåãî êîíñîëüíîãî ïðèëîæåíèÿ               */

    /*******************************************************************/

    //Îáúÿâëÿåì ïåðåìåííûå

    var ObjExec,WshShell,s,IsBreak,ArrS,ColStr,ColFiles,i;

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    //Çàïóñêàåì êîìàíäó DIR

    ObjExec=WshShell.Exec("%COMSPEC% /c dir /b");

    s="";

    IsBreak=false;

    for (;;) {  //Áåñêîíå÷íûé öèêë

     //Ïðîâåðÿåì, äîñòèãíóò ëè êîíåö âûõîäíîãî ïîòîêà êîìàíäû DIR

     if (!ObjExec.StdOut.AtEndOfStream)

      //Ñ÷èòûâàåì ïîëíîñòüþ âûõîäíîé ïîòîê êîìàíäû DIR

      s+=ObjExec.StdOut.ReadAll();

     if (IsBreak) break; //Âûõîäèì èç öèêëà

     if (ObjExec.Status==1)  //Ïðîâåðÿåì, íå çàâåðøèëîñü ëè âûïîëíåíèå DIR

      IsBreak=true;

     else WScript.Sleep(100);  //Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê

    }

    ArrS=s.split("\n");  //Ôîðìèðóåì ìàññèâ ñòðîê

    ColFiles=ArrS.length-1;   // Êîëè÷åñòâî ôàéëîâ â òåêóùåì êàòàëîãå

    WScript.StdOut.WriteLine("Âñåãî ôàéëîâ â òåêóùåì êàòàëîãå: "+ColFiles);

    for (i=0;i<=ColFiles-1;i++)

     WScript.StdOut.WriteLine(ArrS[i]); //Âûâîäèì ñòðîêè íà ýêðàí

    /*************  Êîíåö *********************************************/

    Àíàëîãè÷íûé ñöåíàðèé íà ÿçûêå VBScript ïðèâåäåí â ëèñòèíãå 2.37.

    Ëèñòèíã 2.37. Çàïóñê äî÷åðíåãî êîíñîëüíîãî ïðèëîæåíèÿ (VBScript)

    '*******************************************************************

    ' Èìÿ: ExecConApp.vbs

    ' ßçûê: VbScript

    ' Îïèñàíèå: Çàïóñê äî÷åðíåãî êîíñîëüíîãî ïðèëîæåíèÿ

    '*******************************************************************

    Option Explicit

    ' Îáúÿâëÿåì ïåðåìåííûå

    Dim ObjExec,WshShell,s,IsBreak,ArrS,ColStr,ColFiles,i

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    ' Çàïóñêàåì êîìàíäó DIR

    Set ObjExec=WshShell.Exec("%COMSPEC% /c dir /b")

    s=""

    IsBreak=False

    Do While True  ' Áåñêîíå÷íûé öèêë

     ' Ïðîâåðÿåì, äîñòèãíóò ëè êîíåö âûõîäíîãî ïîòîêà êîìàíäû DIR

     If (Not ObjExec.StdOut.AtEndOfStream) Then

      ' Ñ÷èòûâàåì ïîëíîñòüþ âûõîäíîé ïîòîê êîìàíäû DIR

      s=s+ObjExec.StdOut.ReadAll

     End If

     If IsBreak Then

      Exit Do  ' Âûõîäèì èç öèêëà

     End If

     ' Ïðîâåðÿåì, íå çàâåðøèëîñü ëè âûïîëíåíèå DIR

     If ObjExec.Status=1 Then

      IsBreak=True

     Else

      WScript.Sleep 100 ' Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê

     End If

    Loop

    ArrS=Split(s,vbCrLf)  ' Ôîðìèðóåì ìàññèâ ñòðîê

    ColFiles=UBound(ArrS)  ' Êîëè÷åñòâî ôàéëîâ â òåêóùåì êàòàëîãå

    WScript.StdOut.WriteLine "Âñåãî ôàéëîâ â òåêóùåì êàòàëîãå: " & ColFiles

    For i=0 To ColFiles-1

     WScript.StdOut.WriteLine ArrS(i)  ' Âûâîäèì ñòðîêè íà ýêðàí

    Next

    '*************  Êîíåö *********************************************

    Äîñòóï ê ñïåöèàëüíûì ïàïêàì Windows ÕÐ

    Ïðè óñòàíîâêå Windows âñåãäà àâòîìàòè÷åñêè ñîçäàþòñÿ íåñêîëüêî ñïåöèàëüíûõ ïàïîê (íàïðèìåð, ïàïêà äëÿ ðàáî÷åãî ñòîëà (Desktop) èëè ïàïêà äëÿ ìåíþ Ïóñê (Start)), ïóòü ê êîòîðûì âïîñëåäñòâèè ìîæåò áûòü òåì èëè èíûì ñïîñîáîì èçìåíåí. Ñ ïîìîùüþ ñâîéñòâà

    SpecialFolders
    îáúåêòà
    WshShell
    ìîæíî ñîçäàòü îáúåêò
    WshSpecialFolders
    , êîòîðûé ÿâëÿåòñÿ êîëëåêöèåé, ñîäåðæàùåé ïóòè êî âñåì ñïåöèàëüíûì ïàïêàì, èìåþùèìñÿ â ñèñòåìå (ñïèñîê íàçâàíèé ýòèõ ïàïîê ïðèâåäåí â ãëàâå 1 ïðè îïèñàíèè îáúåêòà
    WshSpecialFolders
    ).

    Â ëèñòèíãàõ 2.38 è 2.39 ïðèâîäÿòñÿ ñöåíàðèè íà ÿçûêàõ JScript è VBScript ñîîòâåòñòâåííî, êîòîðûå ôîðìèðóþò ñïèñîê âñåõ èìåþùèõñÿ â ñèñòåìå ñïåöèàëüíûõ ïàïîê (ðèñ. 2.15).

    Ðèñ. 2.15. Ïóòè äëÿ âñåõ ñïåöèàëüíûõ ïàïîê â Windows ÕÐ


    Ëèñòèíã 2.38. Ôîðìèðîâàíèå ñïèñêà âñåõ ñïåöèàëüíûõ ïàïîê (JScript)

    /******************************************************************/

    /* Èìÿ: SpecFold1.js                                              */

    /* ßçûê: JScript                                                  */

    /* Îïèñàíèå: Âûâîä íàçâàíèé âñåõ ñïåöèàëüíûõ ïàïîê Windows        */

    /******************************************************************/

    var WshShell, WshFldrs, i, s;  //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("Wscript.Shell");

    //Ñîçäàåì îáúåêò WshSpecialFolders

    WshFldrs = WshShell.SpecialFolders;

    s="Ñïèñîê âñåõ ñïåöèàëüíûõ ïàïîê:\n\n";

    //Ïåðåáèðàåì âñå ýëåìåíòû êîëëåêöèè WshFldrs

    for (i=0;i<= WshFldrs.Count()-1;i++) {

     //Ôîðìèðóåì ñòðîêè ñ ïóòÿìè ê ñïåöèàëüíûì ïàïêàì

     s+=WshFldrs(i)+"\n";

    }

    WScript.Echo(s);

    /*************  Êîíåö *********************************************/

    Ëèñòèír 2.39. Ôîðìèðîâàíèå ñïèñêà âñåõ ñïåöèàëüíûõ ïàïîê (VBScript)

    '*****************************************************************

    ' Èìÿ: SpecFold1.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Âûâîä íàçâàíèé âñåõ ñïåöèàëüíûõ ïàïîê Windows

    '*****************************************************************

    Option Explicit

    Dim WshShell, WshFldrs, SpecFldr, s  ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("Wscript.Shell")

    ' Ñîçäàåì îáúåêò WshSpecialFolders

    Set WshFldrs = WshShell.SpecialFolders

    s="Ñïèñîê âñåõ ñïåöèàëüíûõ ïàïîê:" & vbCrLf & vbCrLf

    ' Ïåðåáèðàåì âñå ýëåìåíòû êîëëåêöèè WshFldrs

    For Each SpecFldr In WshFldrs

     ' Ôîðìèðóåì ñòðîêè ñ ïóòÿìè ê ñïåöèàëüíûì ïàïêàì

     s=s & SpecFldr & vbCrLf

    Next

    WScript.Echo s

    '*************  Êîíåö *********************************************/

    Îáúåêò

    WshSpecialFolders
    òàêæå ïîçâîëÿåò ïîëó÷èòü ïóòü ê êîíêðåòíî çàäàííîé ñïåöèàëüíîé ïàïêå. Íàïðèìåð, â ñöåíàðèè SpecFold2.js (ëèñòèíã 2.40) íà ýêðàí âûâîäÿòñÿ ïóòè ê ïàïêàì ðàáî÷åãî ñòîëà (Desktop), èçáðàííûõ ññûëîê (Favorites) è ðàçäåëà Ïðîãðàììû (Programs) ìåíþ Ïóñê (Run) — ðèñ. 2.16.

    Ðèñ. 2.16. Ïóòè äëÿ íåêîòîðûõ ñïåöèàëüíûõ ïàïîê


    Ëèñòèíã 2.40. Äîñòóï ê îïðåäåëåííûì ñïåöèàëüíûì ïàïêàì (JScript)

    /******************************************************************/

    /* Èìÿ: SpecFold2.js                                              */

    /* ßçûê: JScript                                                  */

    /* Îïèñàíèå: Âûâîä íàçâàíèé çàäàííûõ ñïåöèàëüíûõ ïàïîê Windows    */

    /******************************************************************/

    var WshShell, WshFldrs, s;   //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("Wscript.Shell");

    //Ñîçäàåì îáúåêò WshSpecialFolders

    WshFldrs = WshShell.SpecialFolders;

    //Ôîðìèðóåì ñòðîêè ñ ïóòÿìè ê êîíêðåòíûì ñïåöèàëüíûì ïàïêàì

    s="Íåêîòîðûå ñïåöèàëüíûå ïàïêè:\n\n";

    s+="Desktop:\t"+WshFldrs("Desktop")+"\n";

    s+="Favorites:\t"+WshFldrs("Favorites")+"\n";

    s+="Programs:\t"+WshFldrs("Programs");

    WScript.Echo(s);  //Âûâîäèì ñôîðìèðîâàííûå ñòðîêè íà ýêðàí

    /*************  Êîíåö *********************************************/

    Ðåàëèçàöèÿ òîãî æå ñöåíàðèÿ íà ÿçûêå VBScript ïðèâåäåíà â ëèñòèíãå 2.41.

    Ëèñòèíã 2.41. Äîñòóï ê îïðåäåëåííûì ñïåöèàëüíûì ïàïêàì (VBScript)

    '******************************************************************

    ' Èìÿ: SpecFold2.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Âûâîä íàçâàíèé çàäàííûõ ñïåöèàëüíûõ ïàïîê Windows

    '******************************************************************

    Option Explicit

    Dim WshShell, WshFldrs, s   ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("Wscript.Shell")

    ' Ñîçäàåì îáúåêò WshSpecialFolders

    Set WshFldrs = WshShell.SpecialFolders

    ' Ôîðìèðóåì ñòðîêè ñ ïóòÿìè ê êîíêðåòíûì ñïåöèàëüíûì ïàïêàì

    s="Íåêîòîðûå ñïåöèàëüíûå ïàïêè:" & vbCrLf & vbCrLf

    s=s+"Desktop:"+WshFldrs("Desktop") & vbCrLf

    s=s+"Favorites:"+WshFldrs("Favorites") & vbCrLf

    s=s+"Programs:"+WshFldrs("Programs")

    WScript.Echo s   ' Âûâîäèì ñôîðìèðîâàííûå ñòðîêè íà ýêðàí

    '*************  Êîíåö *********************************************/

    Ñîçäàíèå ÿðëûêîâ â ñïåöèàëüíûõ ïàïêàõ

    Äëÿ òîãî ÷òîáû èç ñöåíàðèÿ ñîçäàòü ÿðëûê â ñïåöèàëüíîé ïàïêå (ðàáî÷èé ñòîë, ìåíþ Ïóñê (Start) è ò.ï.) èëè èçìåíèòü ñâîéñòâà óæå ñóùåñòâóþùåãî ÿðëûêà, íåîáõîäèìî:

    1. Èñïîëüçóÿ êîëëåêöèþ

    WshSpecialFolders
    , óçíàòü ïóòü ê íóæíîé ñïåöèàëüíîé ïàïêå.

    2. Ñ ïîìîùüþ ìåòîäà

    CreateShortcut
    îáúåêòà
    WshShell
    ñîçäàòü îáúåêò
    WshShortcut
    (
    WshUrlShortcut
    ) äëÿ ñâÿçè ñ ÿðëûêîì â ýòîé ïàïêå.

    3. Çàäàòü èëè èçìåíèòü ñâîéñòâà ÿðëûêà ñ ïîìîùüþ ñîîòâåòñòâóþùèõ ìåòîäîâ îáúåêòà

    WshShortcut
    (
    WshUrlShortcut
    ).

    4. Ñîõðàíèòü ÿðëûê ñ ïîìîùüþ ìåòîäà Save îáúåêòà WshShortcut (WshUrlShortcut).

    Îáúåêò

    WshShortcut
    ïðåäîñòàâëÿåò äîñòóï ê ñëåäóþùèì ñâîéñòâàì ÿðëûêîâ (ðèñ. 2.17):

    ? Îáúåêò (Target);

    ? Ðàáî÷àÿ ïàïêà (Start in);

    ? Áûñòðûé âûçîâ (Shortcut key);

    ? Îêíî (Run);

    ? Êîììåíòàðèé (Comment).

    Êðîìå ýòîãî, ñ ïîìîùüþ îáúåêòà

    WshShortcut
    ìîæíî ñìåíèòü çíà÷îê, êîòîðûé ñîîòâåòñòâóåò ÿðëûêó.

    Ðèñ. 2.17. Ñâîéñòâà ÿðëûêà â Windows ÕÐ


    Îñòàëüíûõ ñâîéñòâ, èìåþùèõñÿ ó ÿðëûêîâ â Windows ÕÐ, îáúåêò

    WshShortcut
    íå ïîääåðæèâàåò (íàïðèìåð, íåëüçÿ óñòàíîâèòü èëè ñáðîñèòü ôëàæîê, ïîçâîëÿþùèé çàïóñêàòü ïðîöåññ â îòäåëüíîì àäðåñíîì ïðîñòðàíñòâå èëè ïîä äðóãîé ó÷åòíîé çàïèñüþ ïîëüçîâàòåëÿ).

     êà÷åñòâå ïðèìåðà íèæå ïðèâåäåí ñöåíàðèé Shortcut.js (ëèñòèíã 2.42), â êîòîðîì ñîçäàåòñÿ ÿðëûê "Ìîé ÿðëûê.lnk" íà Áëîêíîò (notepad.exe), ïðè÷åì ýòîò ÿðëûê ìîæåò áûòü ñîõðàíåí ëèáî â ìåíþ Ïðîãðàììû (Programs) ðàáîòàþùåãî ïîëüçîâàòåëÿ, ëèáî íà åãî ðàáî÷åì ñòîëå. Âûáîð ñïåöèàëüíîé ïàïêè â ñöåíàðèè ïðîèçâîäèòñÿ ñ ïîìîùüþ äèàëîãîâîãî îêíà, êîòîðîå ñîçäàåòñÿ ìåòîäîì

    Popup
    îáúåêòà
    WshShell
    (ðèñ. 2.18).

    Ðèñ. 2.18. Äèàëîãîâîå îêíî äëÿ âûáîðà ñïåöèàëüíîé ïàïêè


    Ðèñ. 2.10. Ñâîéñòâà ÿðëûêà "Ìîé ÿðëûê.lnk"


    Äëÿ ñîçäàâàåìîãî ÿðëûêà âûáèðàåòñÿ çíà÷îê èç ôàéëà Shell32.dll, íàõîäÿùåãîñÿ â ïîäêàòàëîãå System êàòàëîãà Windows (â Windows 95/98 ýòîò ôàéë íàõîäèòñÿ â ïîäêàòàëîãå System), íàçíà÷àåòñÿ êîìáèíàöèÿ ãîðÿ÷èõ êëàâèø <Ctrl>+<Alt>+<N> è óñòàíàâëèâàåòñÿ ìàêñèìèçèðîâàííûé òèï îêíà (ðèñ. 2.19).

    Ëèñòèíã 2.42. Äîñòóï ê îïðåäåëåííûì ñïåöèàëüíûì ïàïêàì (JScript)

    /*****************************************************************/

    /* Èìÿ: Shortcut.js                                              */

    /* ßçûê: JScript                                                 */

    /* Îïèñàíèå: Ñîçäàíèå ÿðëûêîâ â ñïåöèàëüíûõ ïàïêàõ               */

    /*****************************************************************/

    //Îáúÿâëÿåì ïåðåìåííûå

    var WshShell,MyShortcut,PathTarg,PathIcon,Res,PathShortcut;

    //Èíèöèàëèçèðóåì êîíñòàíòû äëÿ äèàëîãîâûõ îêîí

    var vbYesNo=4,vbQuestion=32,vbYes=6;

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    //Âûâîäèì çàïðîñ äëÿ âûáîðà ïàïêè, â êîòîðîé áóäåò ñîçäàí ÿðëûê

    Res=WshShell.Popup("Ãäå ñîçäàòü ÿðëûê?\nÄà  - íà ðàáî÷åì ñòîëå\nÍåò - â ìåíþ Ïðîãðàììû",0,

     "Ðàáîòà ñ ÿðëûêàìè",vbQuestion+vbYesNo);

    if (Res==vbYes) //Íàæàòà êíîïêà Äà

     //Îïðåäåëÿåì ïóòü ê ðàáî÷åìó ñòîëó

     PathShortcut = WshShell.SpecialFolders("Desktop");

    else

     //Îïðåäåëÿåì ïóòü ê ìåíþ Ïðîãðàììû

     PathShortcut = WshShell.SpecialFolders("Programs");

    //Ñîçäàåì îáúåêò-ÿðëûê

    MyShortcut = WshShell.CreateShortcut(PathShortcut+"\\Ìîé ÿðëûê.lnk");

    //Óñòàíàâëèâàåì ïóòü ê ôàéëó

    PathTarg=WshShell.ExpandEnvironmentStrings("%windir%\\notepad.exe");

    MyShortcut.TargetPath = PathTarg;

    //Íàçíà÷àåì êîìáèíàöèþ ãîðÿ÷èõ êëàâèø

    MyShortcut.Hotkey = "CTRL+ALT+N";

    //Âûáèðàåì èêîíêó èç ôàéëà SHELL32.dll

    PathIcon=

     WshShell.ExpandEnvironmentStrings("%windir%\\system32\\SHELL32.dll");

    MyShortcut.IconLocation = PathIcon+", 1";

    MyShortcut.WindowStyle=3;   //Óñòàíàâëèâàåì òèï îêíà (ìàêñèìèçèðîâàíî)

    MyShortcut.Save();  //Ñîõðàíÿåì ÿðëûê

    WScript.Echo("ßðëûê ñîçäàí|");

    /*************  Êîíåö *********************************************/

    Ðåàëèçàöèÿ òîãî æå ñöåíàðèÿ íà ÿçûêå VBScript ïðèâåäåíà â ëèñòèíãå 2.43.

    Ëèñòèíã 2.43. Äîñòóï ê îïðåäåëåííûì ñïåöèàëüíûì ïàïêàì (VBScript)

    '*****************************************************************

    ' Èìÿ: Shortcut.vbs

    ' ßçûê: JScript

    ' Îïèñàíèå: Ñîçäàíèå ÿðëûêîâ â ñïåöèàëüíûõ ïàïêàõ

    '*****************************************************************

    Option Explicit

    ' Îáúÿâëÿåì ïåðåìåííûå

    Dim WshShell,MyShortcut,PathTarg,PathIcon,Res,PathShortcut

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    ' Âûâîäèì çàïðîñ äëÿ âûáîðà ïàïêè, â êîòîðîé áóäåò ñîçäàí ÿðëûê

    Res=WshShell.Popup("Ãäå ñîçäàòü ÿðëûê?" & vbCrLf & "Äà  - íà ðàáî÷åì ñòîëå" & vbCrLf & _

     "Íåò - â ìåíþ Ïðîãðàììû",0,"Ðàáîòà ñ ÿðëûêàìè",vbQuestion+vbYesNo)

    If Res=vbYes Then  ' Íàæàòà êíîïêà Äà

     ' Îïðåäåëÿåì ïóòü ê ðàáî÷åìó ñòîëó

     PathShortcut = WshShell.SpecialFolders("Desktop")

    Else

     ' Îïðåäåëÿåì ïóòü ê ìåíþ Ïðîãðàììû

     PathShortcut = WshShell.SpecialFolders("Programs")

    End If

    ' Ñîçäàåì îáúåêò-ÿðëûê

    Set MyShortcut = WshShell.CreateShortcut(PathShortcut+"\Ìîé ÿðëûê.lnk")

    ' Óñòàíàâëèâàåì ïóòü ê ôàéëó

    PathTarg=WshShell.ExpandEnvironmentStrings("%windir%\\notepad.exe")

    MyShortcut.TargetPath = PathTarg

    ' Íàçíà÷àåì êîìáèíàöèþ ãîðÿ÷èõ êëàâèø

    MyShortcut.Hotkey = "CTRL+ALT+N"

    ' Âûáèðàåì èêîíêó èç ôàéëà SHELL32.dll

    PathIcon = _

     WshShell.ExpandEnvironmentStrings("%windir%\system32\SHELL32.dll")

    MyShortcut.IconLocation = PathIcon & ", 1"

    MyShortcut.WindowStyle=3  ' Óñòàíàâëèâàåì òèï îêíà (ìàêñèìèçèðîâàíî)

    MyShortcut.Save   ' Ñîõðàíÿåì ÿðëûê

    WScript.Echo "ßðëûê ñîçäàí|"

    '*************  Êîíåö *********************************************

    Ðàáîòà ñ ñèñòåìíûì ðååñòðîì Windows

    Âî âñåõ âåðñèÿõ Windows ñèñòåìíûé ðååñòð — ýòî áàçà äàííûõ, â êîòîðîé õðàíèòñÿ èíôîðìàöèÿ î êîíôèãóðàöèè êîìïüþòåðà è îïåðàöèîííîé ñèñòåìû. Ñ òî÷êè çðåíèÿ ïîëüçîâàòåëÿ, ðååñòð ÿâëÿåòñÿ èåðàðõè÷åñêèì äåðåâîì ðàçäåëîâ, ïîäðàçäåëîâ è ïàðàìåòðîâ. Ðàáîòàòü ñ ýòèì äåðåâîì ìîæíî ñ ïîìîùüþ ñòàíäàðòíîãî ðåäàêòîðà ðååñòðà regedit.exe (ðèñ. 2.20).

    Ðèñ. 2.20. Ðåäàêòîð ðååñòðà regedit.exe


    Ñ ïîìîùüþ ìåòîäîâ îáúåêòà

    WshShell
    èç ñöåíàðèåâ WSH ìîæíî:

    ? ñîçäàâàòü íîâûå ðàçäåëû è ïàðàìåòðû (ìåòîä

    RegWrite
    );

    ? èçìåíÿòü çíà÷åíèÿ ïàðàìåòðîâ è ðàçäåëîâ (ìåòîä

    RegWrite
    );

    ? ñ÷èòûâàòü çíà÷åíèÿ ïàðàìåòðîâ è ðàçäåëîâ (ìåòîä

    RegRead
    );

    ? óäàëÿòü ïàðàìåòðû è ðàçäåëû (ìåòîä

    RegDelete
    ).

    Çàìå÷àíèå

    Â Windows ÕÐ äëÿ ðàáîòû ñ ñèñòåìíûì ðååñòðîì ñöåíàðèé äîëæåí èìåòü ðàçðåøåíèå íà äîñòóï ê ðàçäåëàì ðååñòðà, êîòîðûì îáëàäàåò àäìèíèñòðàòîð.

    Â ëèñòèíãå 2.44 ïðåäñòàâëåí ñöåíàðèé Registry.js, êîòîðûé ïðîèçâîäèò ìàíèïóëÿöèè âíóòðè êîðíåâîãî ðàçäåëà

    HKEY_CURRENT_USER
    , ïðè÷åì êàæäàÿ îïåðàöèÿ âûïîëíÿåòñÿ òîëüêî ïîñëå óòâåðäèòåëüíîãî îòâåòà íà ñîîòâåòñòâóþùèé çàïðîñ, ôîðìèðóåìûé â äèàëîãîâîì îêíå.

    Ñíà÷àëà â ðàçäåëå

    HKEY_CURRENT_USER
    ñîçäàåòñÿ ïîäðàçäåë
    ExampleKey
    , â êîòîðûé çàòåì çàïèñûâàåòñÿ ñòðîêîâûé ïàðàìåòð
    ExampleValue
    ñî çíà÷åíèåì "Value from WSH" (ðèñ. 2.21).

    Ðèñ. 2.21. Ýëåìåíòû ñèñòåìíîãî ðååñòðà, ñîçäàâàåìûå ñöåíàðèåì Registry.js


    Ïîñëå ýòîãî ïàðàìåòð

    ExampleValue
    è ðàçäåë
    ExampleKey
    ïîñëåäîâàòåëüíî óäàëÿþòñÿ èç ðååñòðà.

    Ëèñòèíã 2.44. Ðàáîòà ñ ñèñòåìíûì ðååñòðîì (JScript)

    /********************************************************************/

    /* Èìÿ: Registry.js                                                 */

    /* ßçûê: JScript                                                    */

    /* Îïèñàíèå: Ðàáîòà ñ ñèñòåìíûì ðååñòðîì                            */

    /********************************************************************/

    //Îáúÿâëÿåì ïåðåìåííûå

    var WshShell,Root,Key,Res,SValue,ValueName,SRegValue;

    //Èíèöèàëèçèðóåì êîíñòàíòû äëÿ äèàëîãîâûõ îêîí

    var vbYesNo=4,vbQuestion=32,vbInformation=64,vbYes=6,vbOkOnly=0;

    Root="HKEY_CURRENT_USER";  //Êîðíåâîé êëþ÷

    Key="\\ExampleKey\\";      //Íîâûé êëþ÷

    ValueName="ExampleValue";  //Èìÿ íîâîãî ïàðàìåòðà

    SValue="Value from WSH";   //Çíà÷åíèå íîâîãî ïàðàìåòðà

    //Ñîçäàåì îáúåêò WshShell

    WshShell=WScript.CreateObject("WScript.Shell");

    //Çàïðîñ íà ñîçäàíèå íîâîãî êëþ÷à

    Res=WshShell.Popup("Ñîçäàòü êëþ÷\n"+Root+Key+"?",0,

     "Ðàáîòà ñ ðååñòðîì",vbQuestion+vbYesNo);

    if (Res==vbYes) { //Íàæàòà êíîïêà Äà

     //Çàïèñûâàåì íîâûé êëþ÷

     WshShell.RegWrite(Root+Key,"");

     WshShell.Popup("Êëþ÷\n"+Root+Key+" ñîçäàí!",0,

      "Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly);

    }

    //Çàïðîñ íà çàïèñü íîâîãî ïàðàìåòðà

    Res=WshShell.Popup("Çàïèñàòü ïàðàìåòð\n"+Root+Key+ValueName+"?",0,

     "Ðàáîòà ñ ðååñòðîì",vbQuestion+vbYesNo);

    if (Res==vbYes) { //Íàæàòà êíîïêà Äà

     //Çàïèñûâàåì íîâûé ñòðîêîâûé ïàðàìåòð

     WshShell.RegWrite(Root+Key+ValueName,SValue,"REG_SZ");

     WshShell.Popup("Ïàðàìåòð\n"+Root+Key+ValueName+" çàïèñàí!",0,

      "Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly);

     //Ñ÷èòûâàåì çíà÷åíèå ñîçäàííîãî ïàðàìåòðà

     SRegValue=WshShell.RegRead(Root+Key+ValueName);

     //Âûâîäèì íà ýêðàí ïîëó÷åííîå çíà÷åíèå

     WshShell.Popup(Root+Key+ValueName+"="+SRegValue,0,

      "Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly);

    }

    //Çàïðîñ íà óäàëåíèå ïàðàìåòðà

    Res=WshShell.Popup("Óäàëèòü ïàðàìåòð\n"+Root+Key+ValueName+"?",0,

     "Ðàáîòà ñ ðååñòðîì",vbQuestion+vbYesNo);

    if (Res==vbYes) { //Íàæàòà êíîïêà Äà

     //Óäàëÿåì ïàðàìåòð

     WshShell.RegDelete(Root+Key+ValueName);

     WshShell.Popup("Ïàðàìåòð\n"+Root+Key+ValueName+" óäàëåí!",0,

      "Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly);

    }

    //Çàïðîñ íà óäàëåíèå ðàçäåëà

    Res=WshShell.Popup("Óäàëèòü ðàçäåë\n"+Root+Key+"?",0,

     "Ðàáîòà ñ ðååñòðîì",vbQuestion+vbYesNo);

    if (Res==vbYes) {  //Íàæàòà êíîïêà Äà

     //Óäàëÿåì ðàçäåë

     WshShell.RegDelete(Root+Key);

     WshShell.Popup("Ðàçäåë\n"+Root+Key+" óäàëåí!",0,

      "Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly);

    }

    /*************  Êîíåö *********************************************/

    Ðåàëèçàöèÿ òîãî æå ñöåíàðèÿ íà ÿçûêå VBScript ïðèâåäåíà â ëèñòèíãå 2.45.

    Ëèñòèír 2.45. Ðàáîòà ñ ñèñòåìíûì ðååñòðîì (VBScript)

    '********************************************************************

    ' Èìÿ: Registry.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Ðàáîòà ñ ñèñòåìíûì ðååñòðîì

    '********************************************************************

    Option Explicit

    'Îáúÿâëÿåì ïåðåìåííûå

    Dim WshShell,Root,Key,Res,SValue,ValueName,SRegValue

    Root="HKEY_CURRENT_USER"   'Êîðíåâîé êëþ÷

    Key="\ExampleKey\"         'Íîâûé êëþ÷

    ValueName="ExampleValue"   'Èìÿ íîâîãî ïàðàìåòðà

    SValue="Value from WSH"    'Çíà÷åíèå íîâîãî ïàðàìåòðà

    'Ñîçäàåì îáúåêò WshShell

    Set WshShell=WScript.CreateObject("WScript.Shell")

    'Çàïðîñ íà ñîçäàíèå íîâîãî êëþ÷à

    Res=WshShell.Popup("Ñîçäàòü êëþ÷" & vbCrLf & Root & Key & "?",0,_

     "Ðàáîòà ñ ðååñòðîì",vbQuestion+vbYesNo)

    If Res=vbYes Then   'Íàæàòà êíîïêà Äà

     'Çàïèñûâàåì íîâûé êëþ÷

     WshShell.RegWrite Root & Key, ""

     WshShell.Popup "Êëþ÷" & vbCrLf & Root & Key & " ñîçäàí!",0,_

      "Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly

    End If

    'Çàïðîñ íà çàïèñü íîâîãî ïàðàìåòðà

    Res=WshShell.Popup("Çàïèñàòü ïàðàìåòð" & vbCrLf & Root & Key & _

     ValueName & "?",0,"Ðàáîòà ñ ðååñòðîì",vbQuestion+vbYesNo)

    If Res=vbYes Then   'Íàæàòà êíîïêà Äà

     'Çàïèñûâàåì íîâûé ñòðîêîâûé ïàðàìåòð

     WshShell.RegWrite Root & Key & ValueName,SValue,"REG_SZ"

     WshShell.Popup "Ïàðàìåòð" & vbCrLf & Root & Key & _

      ValueName & " çàïèñàí!",0,"Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly

     'Ñ÷èòûâàåì çíà÷åíèå ñîçäàííîãî ïàðàìåòðà

     SRegValue=WshShell.RegRead(Root & Key & ValueName)

     'Âûâîäèì íà ýêðàí ïîëó÷åííîå çíà÷åíèå

     WshShell.Popup Root & Key & ValueName & "=" & SRegValue,0,_

      "Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly

    End If

    'Çàïðîñ íà óäàëåíèå ïàðàìåòðà

    Res=WshShell.Popup("Óäàëèòü ïàðàìåòð" & vbCrLf & Root & Key & _

     ValueName & "?",0,"Ðàáîòà ñ ðååñòðîì",vbQuestion+vbYesNo)

    If Res=vbYes Then   'Íàæàòà êíîïêà Äà

     'Óäàëÿåì ïàðàìåòð

     WshShell.RegDelete Root & Key & ValueName

     WshShell.Popup "Ïàðàìåòð" & vbCrLf & Root & Key & _

      ValueName & " óäàëåí!",0,"Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly

    End If

    'Çàïðîñ íà óäàëåíèå ðàçäåëà

    Res=WshShell.Popup("Óäàëèòü ðàçäåë" & vbCrLf & Root & Key & _

     "?",0,"Ðàáîòà ñ ðååñòðîì",vbQuestion+vbYesNo)

    If Res=vbYes Then   'Íàæàòà êíîïêà Äà

     'Óäàëÿåì ðàçäåë

     WshShell.RegDelete Root & Key

     WshShell.Popup "Ðàçäåë" & vbCrLf & Root & Key & " óäàëåí!",0,_

      "Ðàáîòà ñ ðååñòðîì",vbInformation+vbOkOnly

    End If

    '*************  Êîíåö *********************************************

    Ðàáîòà ñ ðåñóðñàìè ëîêàëüíîé ñåòè

    Ñòàíäàðòíûì îáúåêòîì, ïîçâîëÿþùèì âûïîëíÿòü òèïîâûå îïåðàöèè ñ ëîêàëüíîé ñåòüþ, ÿâëÿåòñÿ

    WshNetwork
    . Ñ ïîìîùüþ ýòîãî îáúåêòà ìîæíî:

    ? óçíàòü ñåòåâîå èìÿ êîìïüþòåðà, èìÿ òåêóùåãî ïîëüçîâàòåëÿ è íàçâàíèå äîìåíà, â êîòîðîì îí çàðåãèñòðèðîâàëñÿ;

    ? ïîëó÷èòü ñïèñîê âñåõ ñåòåâûõ äèñêîâ è âñåõ ñåòåâûõ ïðèíòåðîâ, ïîäêëþ÷åííûõ ê ðàáî÷åé ñòàíöèè;

    ? ïîäêëþ÷èòü èëè îòêëþ÷èòü ñåòåâîé äèñê è ïðèíòåð;

    ? óñòàíîâèòü ñåòåâîé ïðèíòåð â êà÷åñòâå ïðèíòåðà, èñïîëüçóåìîãî ïî óìîë÷àíèþ.

    Çàìå÷àíèå

    Äëÿ ðåøåíèÿ áîëåå ñëîæíûõ çàäà÷, ñâÿçàííûõ ñ àäìèíèñòðèðîâàíèåì ëîêàëüíîé ñåòè, ìîæíî ïðèìåíÿòü èìåþùèåñÿ â Windows ÕÐ òåõíîëîãèè ADSI — Active Directory Service Interface è WMI — Windows Management Instrumentation. 

    Îïðåäåëåíèå èìåí ðàáî÷åé ñòàíöèè, ïîëüçîâàòåëÿ è äîìåíà

    Äëÿ òîãî ÷òîáû èç ñöåíàðèÿ óçíàòü èìÿ òåêóùåãî ïîëüçîâàòåëÿ, äîìåíà è êîìïüþòåðà â ñåòè, ìîæíî èñïîëüçîâàòü ñîîòâåòñòâóþùèå ñâîéñòâà îáúåêòà

    WshNetwork
    :
    UserName
    ,
    Domain
    è
    ComputerName
    . Ïðèìåðû ñöåíàðèåâ íà ÿçûêàõ JScript è VBScript, êîòîðûå âûâîäÿò íà ýêðàí òàêóþ èíôîðìàöèþ, ïðèâåäåíû â ëèñòèíãàõ 2.46 è 2.47.

    Ëèñòèíã 2.46. Âûâîä ñåòåâûõ ïàðàìåòðîâ ñòàíöèè (JScript)

    /********************************************************************/

    /* Èìÿ: NetworkParam.js                                             */

    /* ßçûê: JScript                                                    */

    /* Îïèñàíèå: Âûâîä ñåòåâûõ ïàðàìåòðîâ ñòàíöèè                       */

    /********************************************************************/

    var WshNetwork,s; //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshNetwork

    WshNetwork = WScript.CreateObject("WScript.Network");

    s="Ñåòåâûå ïàðàìåòðû ñòàíöèè:\n\n";

    //Âûâîäèì íà ýêðàí ñâîéñòâà ComputerName, UserName è UserDomain

    s+="Èìÿ ìàøèíû: "+WshNetwork.ComputerName+"\n";

    s+="Èìÿ ïîëüçîâàòåëÿ: "+WshNetwork.UserName+"\n";

    s+="Äîìåí: "+WshNetwork.UserDomain;

    WScript.Echo(s);

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.47. Âûâîä ñåòåâûõ ïàðàìåòðîâ ñòàíöèè è ñïèñêîâ ïîäêëþ÷åííûõ ñåòåâûõ ðåñóðñîâ (VBScript)

    '********************************************************************

    ' Èìÿ: NetworkParam.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Âûâîä ñåòåâûõ ïàðàìåòðîâ ñòàíöèè

    '********************************************************************

    Option Explicit

    Dim WshNetwork,s,NetwDrives,i,NetwPrinters  ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshNetwork

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    s="Ñåòåâûå ïàðàìåòðû ñòàíöèè:" & vbCrLf & vbCrLf

    ' Âûâîäèì íà ýêðàí ñâîéñòâà ComputerName, UserName è UserDomain

    s=s & "Èìÿ ìàøèíû: " & WshNetwork.ComputerName & vbCrLf

    s= s & "Èìÿ ïîëüçîâàòåëÿ: " & WshNetwork.UserName & vbCrLf

    s= s & "Äîìåí: " & WshNetwork.UserDomain

    WScript.Echo s

    '*************  Êîíåö *********************************************

    Ïîëó÷åíèå ñïèñêà ïîäêëþ÷åííûõ ñåòåâûõ äèñêîâ è ïðèíòåðîâ

    Ó îáúåêòà

    WshNetwork
    èìåþòñÿ ìåòîäû
    EnumNetworkDrives
    è
    EnumPrinterConnections
    , ñ ïîìîùüþ êîòîðûõ ìîæíî ñîçäàòü êîëëåêöèè, ñîäåðæàùèå, ñîîòâåòñòâåííî, ñâåäåíèÿ î âñåõ ïîäêëþ÷åííûõ ê ëîêàëüíîé ñòàíöèè ñåòåâûõ äèñêàõ è ñåòåâûõ ïðèíòåðàõ. Ýòè êîëëåêöèè óñòðîåíû ñëåäóþùèì îáðàçîì: ïåðâûì ýëåìåíòîì ÿâëÿåòñÿ áóêâà äèñêà èëè íàçâàíèå ïîðòà, âòîðûì — ñåòåâîå èìÿ ðåñóðñà, ñ êîòîðûì ñâÿçàí ýòîò äèñê èëè ïðèíòåð. Òà æå ïîñëåäîâàòåëüíîñòü ñîõðàíÿåòñÿ äëÿ âñåõ ýëåìåíòîâ êîëëåêöèè.

     ëèñòèíãàõ 2.48 è 2.49 ïðèâåäåíû ñöåíàðèè íà ÿçûêàõ JScript è VBScript ñîîòâåòñòâåííî, â êîòîðûõ íà ýêðàí âûâîäÿòñÿ äèàëîãîâûå îêíà, ñîäåðæàùèå èíôîðìàöèþ î ñåòåâûõ äèñêàõ è ñåòåâûõ ïðèíòåðàõ, ïîäêëþ÷åííûõ ê ðàáî÷åé ñòàíöèè (ðèñ. 2.22).

    Ðèñ. 2.22. Âûâîäèìàÿ ñöåíàðèåì ListNetworkResources.js èíôîðìàöèÿ î ïîäêëþ÷åííûõ ñåòåâûõ ðåñóðñàõ


    Ëèñòèíã 2.48. Âûâîä ñïèñêà ïîäêëþ÷åííûõ ñåòåâûõ ðåñóðñîâ (JScript)

    /********************************************************************/

    /* Èìÿ: ListNetworkResources.js                                     */

    /* ßçûê: JScript                                                    */

    /* Îïèñàíèå: Âûâîä ïîäêëþ÷åííûõ ñåòåâûõ ðåñóðñîâ (äèñêè è ïðèíòåðû) */

    /********************************************************************/

    var WshNetwork,s,NetwDrives,i,NetwPrinters; //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshNetwork

    WshNetwork = WScript.CreateObject("WScript.Network");

    /*****   Âûâîä ñïèñêà âñåõ ïîäêëþ÷åííûõ ñåòåâûõ äèñêîâ  ******/

    s="Ïîäêëþ÷åííûå ñåòåâûå äèñêè:\n\n";

    //Ñîçäàåì êîëëåêöèþ ñ äàííûìè î ïîäêëþ÷åííûõ äèñêàõ

    NetwDrives = WshNetwork.EnumNetworkDrives();

    i=0;

    while (i<=NetwDrives.Count()-2) {  //Ïåðåáèðàåì ýëåìåíòû êîëëåêöèè

     //Â ïåðâîì ýëåìåíòå êîëëåêöèè ñîäåðæèòñÿ áóêâà äèñêà,

     //âî âòîðîì - ñåòåâîå èìÿ ðåñóðñà è ò.ä.

     s+=NetwDrives(i)+"  "+NetwDrives(i+1)+"\n";

     i=i+2;

    }

    WScript.Echo(s);  //Âûâîäèì ñôîðìèðîâàííûå ñòðîêè íà ýêðàí

    /******   Âûâîä ñïèñêà âñåõ ïîäêëþ÷åííûõ ñåòåâûõ ïðèíòåðîâ  ******/

    s="Ïîäêëþ÷åííûå ñåòåâûå ïðèíòåðû:\n\n";

    //Ñîçäàåì êîëëåêöèþ ñ äàííûìè î ïîäêëþ÷åííûõ ïðèíòåðàõ

    NetwPrinters = WshNetwork.EnumPrinterConnections();

    i=0;

    while (i<=NetwPrinters.Count()-2) {  //Ïåðåáèðàåì ýëåìåíòû êîëëåêöèè

     //Â ïåðâîì ýëåìåíòå êîëëåêöèè ñîäåðæèòñÿ íàçâàíèÿ ëîêàëüíûõ ïîðòîâ,

     //âî âòîðîì - ñåòåâîå èìÿ ïðèíòåðà è ò.ä.

     s+=NetwPrinters(i)+"  "+NetwPrinters(i+1)+"\n";

     i=i+2;

    }

    WScript.Echo(s); //Âûâîäèì ñôîðìèðîâàííûå ñòðîêè íà ýêðàí

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.49. Âûâîä ñïèñêà ïîäêëþ÷åííûõ ñåòåâûõ ðåñóðñîâ (VBScript)

    '********************************************************************

    ' Èìÿ: ListNetworkResources.vbs                                       

    ' ßçûê: JScript                                                   

    ' Îïèñàíèå: Âûâîä ïîäêëþ÷åííûõ ñåòåâûõ ðåñóðñîâ (äèñêè è ïðèíòåðû) 

    '********************************************************************

    Option Explicit

    Dim WshNetwork,s,NetwDrives,i,NetwPrinters  ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshNetwork

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    '********   Âûâîä ñïèñêà âñåõ ïîäêëþ÷åííûõ ñåòåâûõ äèñêîâ   *********

    s="Ïîäêëþ÷åííûå ñåòåâûå äèñêè:" & vbCrLf & vbCrLf

    ' Ñîçäàåì êîëëåêöèþ ñ äàííûìè î ïîäêëþ÷åííûõ äèñêàõ

    Set NetwDrives = WshNetwork.EnumNetworkDrives()

    i=0

    While i<=NetwDrives.Count()-2  ' Ïåðåáèðàåì ýëåìåíòû êîëëåêöèè

     ' Â ïåðâîì ýëåìåíòå êîëëåêöèè ñîäåðæèòñÿ áóêâà äèñêà,

     ' âî âòîðîì - ñåòåâîå èìÿ ðåñóðñà è ò.ä.

     s=s & NetwDrives.Item(i) & "  " & NetwDrives.Item(i+1) & vbCrLf

     i=i+2

    Wend

    WScript.Echo s   ' Âûâîäèì ñôîðìèðîâàííûå ñòðîêè íà ýêðàí

    '********    Âûâîä ñïèñêà âñåõ ïîäêëþ÷åííûõ ñåòåâûõ ïðèíòåðîâ    *******

    s="Ïîäêëþ÷åííûå ñåòåâûå ïðèíòåðû:" & vbCrLf & vbCrLf

    ' Ñîçäàåì êîëëåêöèþ ñ äàííûìè î ïîäêëþ÷åííûõ ïðèíòåðàõ

    Set NetwPrinters = WshNetwork.EnumPrinterConnections()

    i=0

    While i<=NetwPrinters.Count()-2   ' Ïåðåáèðàåì ýëåìåíòû êîëëåêöèè

     ' Â ïåðâîì ýëåìåíòå êîëëåêöèè ñîäåðæèòñÿ íàçâàíèÿ ëîêàëüíûõ ïîðòîâ,

     ' âî âòîðîì - ñåòåâîå èìÿ ïðèíòåðà è ò.ä.

     s=s & NetwPrinters.Item(i) & "  " & NetwPrinters.Item(i+1) & vbCrLf

     i=i+2

    Wend

    WScript.Echo s  'Âûâîäèì ñôîðìèðîâàííûå ñòðîêè íà ýêðàí

    '*************  Êîíåö *********************************************

    Ïîäêëþ÷åíèå è îòêëþ÷åíèå ñåòåâûõ äèñêîâ è ïðèíòåðîâ

    Èìåþùèåñÿ â ëîêàëüíîé ñåòè îáùåäîñòóïíûå ðåñóðñû (äèñêè è ïðèíòåðû) ìîæíî ïîñðåäñòâîì ñöåíàðèÿ ïîäêëþ÷èòü ê ðàáî÷åé ñòàíöèè äëÿ ñîâìåñòíîãî èñïîëüçîâàíèÿ. Ïîäêëþ÷àåìîìó ñåòåâîìó äèñêó ïðè ýòîì íóæíî ïîñòàâèòü â ñîîòâåòñòâèå íåçàíÿòóþ áóêâó ëîêàëüíîãî äèñêà (íàïðèìåð, åñëè â ñèñòåìå óæå èìåþòñÿ äèñêè Ñ:, D: è Å: (ëîêàëüíûå èëè ñåòåâûå), òî ñåòåâîé äèñê ìîæíî ïîäêëþ÷èòü ïîä áóêâîé F: èëè K:, íî íå Å:).  ñëó÷àå ïîäêëþ÷åíèÿ ñåòåâîãî ïðèíòåðà ìîæíî ëèáî íàïðÿìóþ ñîåäèíèòüñÿ ñ ýòèì ïðèíòåðîì (äëÿ ïå÷àòè èç ïðèëîæåíèé Windows), ëèáî ïîñòàâèòü â ñîîòâåòñòâèå óäàëåííîìó ïðèíòåðó ëîêàëüíûé ïîðò (äëÿ ïå÷àòè èç ñòàðûõ ïðèëîæåíèé MS-DOS).

    Çàìå÷àíèå

    Ñåòåâûå äèñêè è ïðèíòåðû òàêæå ìîæíî ïîäêëþ÷èòü ñ ïîìîùüþ Ïðîâîäíèêà Windows èëè âûïîëíèâ ñîîòâåòñòâóþùóþ êîìàíäó

    NET USE
    .

     êà÷åñòâå ïðèìåðà ðàññìîòðèì JScript-ñöåíàðèé MapResources.js (ëèñòèíã 2.50), â êîòîðîì ïðîèçâîäèòñÿ ïîäêëþ÷åíèå äèñêà K: ê ñåòåâîìó ðåñóðñó \\RS_NT_Server\d è óñòàíîâêà ñâÿçè ëîêàëüíîãî ïîðòà LPT1 ñ ñåòåâûì ïðèíòåðîì \\104_Stepankova\HP.

    Ñíà÷àëà íóæíî ñîçäàòü ýêçåìïëÿðû îáúåêòîâ WshNetwork è WshShell:

    WshNetwork = WScript.CreateObject("WScript.Network");

    WshShell = WScript.CreateObject("WScript.Shell");

    Äëÿ òîãî ÷òîáû ïîäêëþ÷èòü ñåòåâîé äèñê ê óñòðîéñòâó K:, íóæíî áûòü óâåðåííûì, ÷òî ñ ýòîé áóêâîé óæå íå ñâÿçàí ñåòåâîé äèñê (èíà÷å ïðîèçîéäåò îøèáêà). Ïîýòîìó ïðåäâàðèòåëüíî îòêëþ÷àåòñÿ ñåòåâîé äèñê ñ ïîìîùüþ ìåòîäà RemoveNetworkDrive:

    WshNetwork.RemoveNetworkDrive(Drive);

    (ïåðåìåííîé Drive çàðàíåå áûëî ïðèñâîåíî çíà÷åíèå "K:"). Ïðè âûïîëíåíèè ýòîé êîìàíäû ìîæåò ïðîèçîéòè îøèáêà âðåìåíè âûïîëíåíèÿ (íàïðèìåð, äèñê K: íå ñóùåñòâóåò èëè âîçíèêëà îøèáêà ïðè îòêëþ÷åíèè ñâÿçàííîãî ñ íèì ñåòåâîãî ðåñóðñà), ïîýòîìó âûçîâ ìåòîäà

    RemoveNetworkDrive
    ïîìåùàåòñÿ âíóòðü áëîêà try êîíñòðóêöèè
    try…catch
    ÿçûêà JScript, êîòîðàÿ ïîçâîëÿåò îáðàáàòûâàòü òàêèå îøèáêè:

    try {

     //Îòêëþ÷àåì ñåòåâîé äèñê

     WshNetwork.RemoveNetworkDrive(Drive);

    } catch (e) { //Îáðàáàòûâàåì âîçìîæíûå îøèáêè

    if (å.number != 0) {

     //Âûâîäèì ñîîáùåíèå îá îøèáêå

     IsError=true;

     Mess="Îøèáêà ïðè îòêëþ÷åíèè äèñêà "+Drive + "\nÊîä îøèáêè: "+

      å.number+"\nÎïèñàíèå: " + å.description;

     WshShell.Popup(Mess, 0, "Îòêëþ÷åíèå ñåòåâîãî äèñêà", vbCritical);

     }

    }

    Òåïåðü â ñëó÷àå âîçíèêíîâåíèÿ îøèáêè ïðè ðàáîòå ìåòîäà

    RemoveNetworkDrive
    óïðàâëåíèå ïåðåäàñòñÿ âíóòðü áëîêà
    catch
    , à â ïîëÿõ ïåðåìåííîé-îáúåêòà å áóäåò ñîäåðæàòüñÿ èíôîðìàöèÿ î ïðîèçîøåäøåé îøèáêå (
    å.number
    — ÷èñëîâîé êîä îøèáêè,
    å.description
    — êðàòêîå îïèñàíèå îøèáêè); ýòà èíôîðìàöèÿ îòîáðàæàåòñÿ â äèàëîãîâîì îêíå (ðèñ. 2.23).

    Ðèñ. 2.23. Èíôîðìàöèÿ îá îøèáêå, ïðîèçîøåäøåé ïðè îòêëþ÷åíèè äèñêà K:


    Åñëè æå îòêëþ÷åíèå äèñêà K: ïðîøëî óñïåøíî, íà ýêðàí âûâîäèòñÿ äèàëîãîâîå îêíî ñ èíôîðìàöèåé îá ýòîì (ðèñ. 2.24):

    if (!IsError) { //Âñå â ïîðÿäêå

     Mess="Äèñê "+Drive+" îòêëþ÷åí óñïåøíî";

     WshShell.Popup(Mess, 0, "Îòêëþ÷åíèå ñåòåâîãî äèñêà", vbInformation);

    }

    Ðèñ. 2.24. Èíôîðìàöèÿ îá óñïåøíîì îòêëþ÷åíèè äèñêà K:


    Àíàëîãè÷íûé áëîê

    try…catch
    èñïîëüçóåòñÿ è ïðè ïîäêëþ÷åíèè ñåòåâîãî äèñêà:

    try {

     //Ïîäêëþ÷àåì ñåòåâîé äèñê

     WshNetwork.MapNetworkDrive(Drive, NetPath);

    } catch (e) {

     //Îáðàáàòûâàåì âîçìîæíûå îøèáêè

     if (e != 0) {

      //Âûâîäèì ñîîáùåíèå îá îøèáêå

      IsError=true;

      Mess="Îøèáêà ïðè ïîäêëþ÷åíèè äèñêà " + Drive + " ê " + NetPath+

       "\nÊîä îøèáêè: "+å.number + "\nÎïèñàíèå: "+å.description;

       WshShell.Popup(Mess, 0, "Ïîäêëþ÷åíèå ñåòåâîãî äèñêà", vbCritical);

    Åñëè, íàïðèìåð, ïîëüçîâàòåëü, êîòîðûé ïîäêëþ÷àåò ñåòåâîé äèñê, íå èìååò ñîîòâåòñòâóþùèõ ïðàâ äîñòóïà ê ñåòåâîìó ðåñóðñó, òî íà ýêðàí âûâåäåòñÿ äèàëîãîâîå îêíî, èçîáðàæåííîå íà ðèñ. 2.25.

    Ðèñ. 2.25. Èíôîðìàöèÿ îá îøèáêå, ïðîèçîøåäøåé ïðè ïîäêëþ÷åíèè äèñêà K:


    Îñâîáîæäåíèå ëîêàëüíîãî ïîðòà (ìåòîä

    RemovePrinterConnection
    ), ïîäêëþ÷åíèå ñåòåâîãî ïðèíòåðà ê ýòîìó ïîðòó (ìåòîä
    AddPrinterConnection
    ) è îáðàáîòêà îøèáîê âðåìåíè âûïîëíåíèÿ, êîòîðûå ìîãóò âîçíèêíóòü ïðè ýòèõ äåéñòâèÿõ, ïðîèçâîäèòñÿ â ñöåíàðèè àíàëîãè÷íûì îáðàçîì.

    Ëèñòèíã 2.50. Îòêëþ÷åíèå è ïîäêëþ÷åíèå ñåòåâûõ ðåñóðñîâ (JScript)

    /********************************************************************/

    /* Èìÿ: MapResources.js                                             */

    /* ßçûê: JScript                                                    */

    /* Îïèñàíèå: Îòêëþ÷åíèå è ïîäêëþ÷åíèå ñåòåâûõ äèñêîâ è ïðèíòåðîâ    */

    /********************************************************************/

    //Îáúÿâëÿåì ïåðåìåííûå

    var WshNetwork,WshShell,Drive,NetPath,Port,NetPrinter,Mess,IsError;

    //Èíèöèàëèçèðóåì êîíñòàíòû äëÿ äèàëîãîâûõ îêîí

    var vbCritical=16,vbInformation=64;

    Drive="K:";      //Áóêâà äèñêà

    //NetPath="\\\\RS_NT_Server\\d";  //Ñåòåâîé ïóòü äëÿ ïîäêëþ÷åíèÿ äèñêà

    NetPath="\\\\RS_NT_Server\\d";  //Ñåòåâîé ïóòü äëÿ ïîäêëþ÷åíèÿ äèñêà

    Port="LPT1";   //Íàçâàíèå ëîêàëüíîãî ïîðòà

    //Ñåòåâîé ïóòü äëÿ ïîäêëþ÷åíèÿ ïðèíòåðà

    NetPrinter="\\\\104_Stepankova\\HP";

    //Ñîçäàåì îáúåêò WshNetwork

    WshNetwork = WScript.CreateObject("WScript.Network");

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    /*************  Îòêëþ÷åíèå ñåòåâîãî äèñêà  ***********************/

    IsError=false;

    try {

     //Îòêëþ÷àåì ñåòåâîé äèñê

     WshNetwork.RemoveNetworkDrive(Drive);

    } catch (e) {  //Îáðàáàòûâàåì âîçìîæíûå îøèáêè

     if (e != 0) {

      //Âûâîäèì ñîîáùåíèå îá îøèáêå

      IsError=true;

      Mess="Îøèáêà ïðè îòêëþ÷åíèè äèñêà "+Drive+"\nÊîä îøèáêè: "+

       e.number+"\nÎïèñàíèå: "+e.description;

      WshShell.Popup(Mess,0,"Îòêëþ÷åíèå ñåòåâîãî äèñêà",vbCritical);

     }

    }

    if (!IsError) {

     //Âñå â ïîðÿäêå

     Mess="Äèñê "+Drive+" îòêëþ÷åí óñïåøíî";

     WshShell.Popup(Mess,0,"Îòêëþ÷åíèå ñåòåâîãî äèñêà",vbInformation);

    }

    /*************  Ïîäêëþ÷åíèå ñåòåâîãî äèñêà  ***********************/

    IsError=false;

    try {

     //Ïîäêëþ÷àåì ñåòåâîé äèñê

     WshNetwork.MapNetworkDrive(Drive,NetPath);

    } catch (e) { //Îáðàáàòûâàåì âîçìîæíûå îøèáêè

     if (e != 0) {

      //Âûâîäèì ñîîáùåíèå îá îøèáêå

      IsError=true;

      Mess="Îøèáêà ïðè ïîäêëþ÷åíèè äèñêà " + Drive + " ê " + NetPath+

       "\nÊîä îøèáêè: "+e.number+"\nÎïèñàíèå: "+e.description;

      WshShell.Popup(Mess,0,"Ïîäêëþ÷åíèå ñåòåâîãî äèñêà",vbCritical);

     }

    }

    if (!IsError) {

     //Âñå â ïîðÿäêå

     Mess="Äèñê "+Drive+" óñïåøíî ïîäêëþ÷åí ê "+NetPath;

     WshShell.Popup(Mess,0,"Ïîäêëþ÷åíèå ñåòåâîãî äèñêà",vbInformation);

    }

    /*************  Îñâîáîæäåíèå ëîêàëüíîãî ïîðòà  ***********************/

    IsError=false;

    try {

     //Ðàçðûâàåì ñâÿçü ñ ñåòåâûì ïðèíòåðîì

     WshNetwork.RemovePrinterConnection(Port);

    } catch (e) {

     if (e != 0) {  //Îáðàáàòûâàåì âîçìîæíûå îøèáêè

      //Âûâîäèì ñîîáùåíèå îá îøèáêå

      IsError=true;

      Mess="Îøèáêà ïðè îòêëþ÷åíèè ïîðòà "+Port+"\nÊîä îøèáêè: "+

       e.number+"\nÎïèñàíèå: "+e.description;

      WshShell.Popup(Mess,0,"Îòêëþ÷åíèå ëîêàëüíîãî ïîðòà îò ñåòåâîãî ðåñóðñà",vbCritical);

     }

    }

    if (!IsError) {

     //Âñå â ïîðÿäêå

     Mess="Ïîðò "+Port+" îòêëþ÷åí óñïåøíî";

     WshShell.Popup(Mess,0,"Îòêëþ÷åíèå ëîêàëüíîãî ïîðòà îò ñåòåâîãî ðåñóðñà",vbInformation);

    }

    /*****  Ïîäêëþ÷åíèå ëîêàëüíîãî ïîðòà  ê ñåòåâîìó ïðèíòåðó  *********/

    IsError=false;

    try {

     //Ïîäêëþ÷àåì ñåòåâîé ïðèíòåð ê ëîêàëüíîìó ïîðòó

     WshNetwork.AddPrinterConnection(Port,NetPrinter);

    } catch (e) {  //Îáðàáàòûâàåì âîçìîæíûå îøèáêè

     if (e != 0) {

      //Âûâîäèì ñîîáùåíèå îá îøèáêå

      IsError=true;

      Mess="Îøèáêà ïðè ïåðåíàçíà÷åíèè ïîðòà "+Port+ " íà "+NetPrinter+

       "\nÊîä îøèáêè: "+e.number+"\nÎïèñàíèå: "+e.description;

      WshShell.Popup(Mess,0,"Ïîäêëþ÷åíèå ëîêàëüíîãî ïîðòà ê ñåòåâîìó ðåñóðñó",vbCritical);

     }

    }

    if (!IsError) {

     //Âñå â ïîðÿäêå

     Mess="Ïîðò "+Port+" óñïåøíî ïîäêëþ÷åí ê "+NetPrinter;

     WshShell.Popup(Mess,0,"Ïîäêëþ÷åíèå ëîêàëüíîãî ïîðòà ê ñåòåâîìó ðåñóðñó",vbInformation);

    }

    /*************  Êîíåö *********************************************/

    Ðåàëèçàöèÿ òîãî æå ñöåíàðèÿ íà ÿçûêå VBScript ïðåäñòàâëåíà â ëèñòèíãå 2.51. Ãëàâíîå îòëè÷èå çäåñü ñîñòîèò â ñïîñîáå îáðàáîòêè âîçìîæíûõ îøèáîê âðåìåíè âûïîëíåíèÿ.  VBScript äëÿ ýòîé öåëè ïðåäíàçíà÷åí îïåðàòîð

    On Error Resume Next
    — ïðè âîçíèêíîâåíèè îøèáêè ïîñëå âûïîëíåíèÿ ýòîãî îïåðàòîðà ñöåíàðèé íå ïðåðâåòñÿ, à ïðîñòî ïåðåéäåò ê âûïîëíåíèþ ñëåäóþùåé ñòðîêè êîäà. Ïðîàíàëèçèðîâàòü æå âîçíèêøóþ îøèáêó ìîæíî ñ ïîìîùüþ ñïåöèàëüíîãî îáúåêòà
    Err
    , â ïîëÿõ
    Number
    è
    Description
    êîòîðîãî áóäóò ñîîòâåòñòâåííî ñîäåðæàòüñÿ êîä è îïèñàíèå îøèáêè.

    Ëèñòèíã 2.51. Îòêëþ÷åíèå è ïîäêëþ÷åíèå ñåòåâûõ ðåñóðñîâ (VBScript)

    '********************************************************************

    ' Èìÿ: MapResources.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Îòêëþ÷åíèå è ïîäêëþ÷åíèå ñåòåâûõ äèñêîâ è ïðèíòåðîâ

    '********************************************************************

    Option Explicit

    ' Îáúÿâëÿåì ïåðåìåííûå

    Dim WshNetwork,Drive,NetPath,Port,NetPrinter

    Drive="K:"   ' Áóêâà äèñêà

    NetPath="\\RS_NT_Server\d"    ' Ñåòåâîé ïóòü äëÿ ïîäêëþ÷åíèÿ äèñêà

    Port="LPT1"   ' Íàçâàíèå ëîêàëüíîãî ïîðòà

    ' Ñåòåâîé ïóòü äëÿ ïîäêëþ÷åíèÿ ïðèíòåðà

    NetPrinter="\\104_Stepankova\HP"

    ' Ñîçäàåì îáúåêò WshNetwork

    Set WshNetwork = WScript.CreateObject("WScript.Network")

    ' Ñîçäàåì îáúåêò WshShell

    Set WshShell = WScript.CreateObject("WScript.Shell")

    On Error Resume Next  ' Âêëþ÷àåì îáðàáîòêó îøèáîê âðåìåíè âûïîëíåíèÿ

    '*************  Îòêëþ÷åíèå ñåòåâîãî äèñêà  ***********************

    ' Îòêëþ÷àåì ñåòåâîé äèñê

    WshNetwork.RemoveNetworkDrive Drive

    If Err.Number<>0 Then

     Mess="Îøèáêà ïðè îòêëþ÷åíèè äèñêà " & Drive & vbCrLf & _

      "Êîä îøèáêè: " &  e.number & vbCrLf &+ _

      "Îïèñàíèå: " & e.description

     WshShell.Popup Mess,0,"Îòêëþ÷åíèå ñåòåâîãî äèñêà",vbCritical

    Else

     ' Âñå â ïîðÿäêå

     Mess="Äèñê " & Drive & " îòêëþ÷åí óñïåøíî"

     WshShell.Popup Mess,0,"Îòêëþ÷åíèå ñåòåâîãî äèñêà",vbInformation

    End If

    '*************  Ïîäêëþ÷åíèå ñåòåâîãî äèñêà  ***********************

    ' Ïîäêëþ÷àåì ñåòåâîé äèñê

    WshNetwork.MapNetworkDrive Drive,NetPath

    If Err.Number<>0 Then

     Mess="Îøèáêà ïðè ïîäêëþ÷åíèè äèñêà " & Drive & " ê " & NetPath &_

      "Êîä îøèáêè: " & e.number & "Îïèñàíèå: " & e.description

     WshShell.Popup Mess,0,"Ïîäêëþ÷åíèå ñåòåâîãî äèñêà",vbCritical

    Else

     ' Âñå â ïîðÿäêå

     Mess="Äèñê " & Drive & " óñïåøíî ïîäêëþ÷åí ê " & NetPath

     WshShell.Popup Mess,0,"Ïîäêëþ÷åíèå ñåòåâîãî äèñêà",vbInformation

    End If

    '*************  Îñâîáîæäåíèå ëîêàëüíîãî ïîðòà  ***********************

    ' Ðàçðûâàåì ñâÿçü ñ ñåòåâûì ïðèíòåðîì

    WshNetwork.RemovePrinterConnection Port

    If Err.Number<>0 Then

     Mess="Îøèáêà ïðè îòêëþ÷åíèè ïîðòà " & Port & "Êîä îøèáêè: " &_

      e.number & "Îïèñàíèå: " & e.description

     WshShell.Popup Mess,0,"Îòêëþ÷åíèå ïîðòà îò ñåòåâîãî ðåñóðñà",vbCritical

    Else

     ' Âñå â ïîðÿäêå

     Mess="Ïîðò " & Port & " îòêëþ÷åí óñïåøíî"

     WshShell.Popup Mess,0,"Îòêëþ÷åíèå ïîðòà îò ñåòåâîãî ðåñóðñà",_

      vbInformation

    End If

    '*****  Ïîäêëþ÷åíèå ëîêàëüíîãî ïîðòà  ê ñåòåâîìó ïðèíòåðó  *********

    ' Ïîäêëþ÷àåì ñåòåâîé ïðèíòåð ê ëîêàëüíîìó ïîðòó

    WshNetwork.AddPrinterConnection Port,NetPrinter

    If Err.Number<>0 Then

     Mess="Îøèáêà ïðè ïåðåíàçíà÷åíèè ïîðòà " & Port & " íà " & NetPrinter &_

      "Êîä îøèáêè: " & e.number & "Îïèñàíèå: " & e.description

     WshShell.Popup Mess,0,"Ïîäêëþ÷åíèå ïîðòà ê ñåòåâîìó ðåñóðñó",vbCritical

    Else

     ' Âñå â ïîðÿäêå

     Mess="Ïîðò " & Port & " óñïåøíî ïîäêëþ÷åí ê " & NetPrinter

     WshShell.Popup Mess,0,"Ïîäêëþ÷åíèå ïîðòà ê ñåòåâîìó ðåñóðñó",

      vbInformation

    End If

    '*************  Êîíåö *********************************************

    Çàïóñê ñöåíàðèåâ íà óäàëåííûõ ìàøèíàõ. Êîíòðîëü çà õîäîì âûïîëíåíèÿ òàêèõ ñöåíàðèåâ

    Íà÷èíàÿ ñ âåðñèè 5.6 ñöåíàðèè WSH ìîæíî çàïóñêàòü íå òîëüêî íà ëîêàëüíîé ìàøèíå, íî è íà äðóãèõ êîìïüþòåðàõ, èìåþùèõñÿ â ñåòè (ýòî ìîæåò áûòü î÷åíü óäîáíî äëÿ öåíòðàëèçîâàííîãî àäìèíèñòðèðîâàíèÿ óäàëåííûõ ðàáî÷èõ ñòàíöèé).

    Òàêèå WSH-ñöåíàðèè íàçûâàþòñÿ óäàëåííûìè ñöåíàðèÿìè (remote scripts). Ïðè ýòîì ôàéë ñî ñöåíàðèåì ìîæåò íàõîäèòüñÿ ëèáî íà ëîêàëüíîé ìàøèíå, ëèáî íà îáùåäîñòóïíîì ñåòåâîì ðåñóðñå. Íà æåñòêèé äèñê óäàëåííîé ìàøèíû ôàéë ñöåíàðèÿ êîïèðîâàòüñÿ íå áóäåò — âìåñòî ýòîãî òåêñò ñöåíàðèÿ ïî êîììóíèêàöèîííîìó ïðîòîêîëó DCOM — Distributed ÑÎÌ (ðàñïðåäåëåííûé ÑÎÌ) ïåðåäàåòñÿ íåïîñðåäñòâåííî â ïàìÿòü ïðîöåññà, çàïóñêàåìîãî íà ýòîé ìàøèíå.

    Åñòåñòâåííî, òàêîé ìåõàíèçì çàïóñêà ñöåíàðèåâ ÿâëÿåòñÿ âåñüìà ìîùíûì ñðåäñòâîì óäàëåííîãî àäìèíèñòðèðîâàíèÿ, îäíàêî îí òàêæå ìîæåò áûòü èñïîëüçîâàí äëÿ áûñòðîãî è ïðàêòè÷åñêè íåçàìåòíîãî ðàñïðîñòðàíåíèÿ ïî ñåòè âèðóñîâ. Ïîýòîìó ïðè èñïîëüçîâàíèè óäàëåííûõ ñöåíàðèåâ WSH ïðåäóñìîòðåíû äîâîëüíî ñòðîãèå ìåðû áåçîïàñíîñòè.

    Âî-ïåðâûõ, è íà ëîêàëüíîé è íà óäàëåííîé ìàøèíàõ äîëæíû áûòü óñòàíîâëåíû îïåðàöèîííûå ñèñòåìû Windows NT (SP 3)/Windows 2000/Windows ÕÐ (ñèñòåìû Windows 95/98/ME íå ïîääåðæèâàþòñÿ).

    Âî-âòîðûõ, ïîëüçîâàòåëü, êîòîðûé çàïóñêàåò ñöåíàðèé, äîëæåí âõîäèòü â ãðóïïó ëîêàëüíûõ àäìèíèñòðàòîðîâ íà òîé ìàøèíå, ãäå äîëæåí âûïîëíÿòüñÿ ñöåíàðèé.

    Â-òðåòüèõ, óäàëåííàÿ ìàøèíà äîëæíà áûòü ïðåäâàðèòåëüíî íàñòðîåíà äëÿ âûïîëíåíèÿ óäàëåííûõ ñöåíàðèåâ (ïî óìîë÷àíèþ ïîñëå ïåðâîíà÷àëüíîé óñòàíîâêè âûïîëíåíèå òàêèõ ñöåíàðèåâ çàïðåùåíî). Äëÿ ýòîãî íåîáõîäèìî çàïèñàòü 1 â ñëåäóþùèé ïàðàìåòð ñèñòåìíîãî ðååñòðà:

    HKLM\Software\Microsoft\Windows Script Host\Settings\Remote
     (À)

    (åñëè ýòîò ïàðàìåòð íå ñóùåñòâóåò, åãî íóæíî ñîçäàòü). Åñëè çíà÷åíèåì ýòîãî ïàðàìåòðà ÿâëÿåòñÿ 0, òî ýòî îçíà÷àåò, ÷òî âûïîëíåíèå óäàëåííûõ ñöåíàðèåâ íà ìàøèíå çàïðåùåíî.

    Äëÿ òîãî ÷òîáû ðàçðåøèòü âûïîëíåíèå óäàëåííûõ ñöåíàðèåâ íà óðîâíå ïîëüçîâàòåëÿ, íåîáõîäèìî ñîçäàòü ïàðàìåòð

    HKCU\Software\Microsoft\Windows Script Host\Settings\Remote
     (Á)

    è òàêæå çàïèñàòü â íåãî 1. Åñëè çíà÷åíèåì ýòîãî ïàðàìåòðà ÿâëÿåòñÿ 0, òî ýòî îçíà÷àåò, ÷òî âûïîëíåíèå óäàëåííûõ ñöåíàðèåâ äëÿ òåêóùåãî ïîëüçîâàòåëÿ çàïðåùåíî.

    Òàêæå ïðè íàñòðîéêå ðåæèìà âûïîëíåíèÿ óäàëåííûõ ñöåíàðèåâ íóæíî ïðîâåðèòü çíà÷åíèå ïàðàìåòðà

    HKLM\Software\Microsoft\Windows Script Host\Settings\IgnoreUserSettings
    (Â)

    Åñëè çíà÷åíèåì ýòîãî ïàðàìåòðà ÿâëÿåòñÿ 1, òî ïàðàìåòð (Á) èãíîðèðóåòñÿ è ïðîâåðÿåòñÿ òîëüêî çíà÷åíèå ïàðàìåòðà (À). Åñëè æå çíà÷åíèåì ïàðàìåòðà (Â) ÿâëÿåòñÿ 0, òî WSH ñíà÷àëà ïðîâåðÿåò ïàðàìåòð (Á) è òîëüêî â ñëó÷àå åãî îòñóòñòâèÿ ïðèíèìàåòñÿ âî âíèìàíèå çíà÷åíèå ïàðàìåòðà (À).

    Åñëè óäàëåííûå ñöåíàðèè íóæíî âûïîëíÿòü íà ìàøèíå ñ îïåðàöèîííîé ñèñòåìîé Windows ÕÐ, òî íà ýòîé ìàøèíå íóæíî ïåðåðåãèñòðèðîâàòü ñåðâåð wscript.exe ñ ïîìîùüþ ñëåäóþùåé êîìàíäû:

    wscript.exe -regserver

    Óäàëåííûå ñöåíàðèè âñåãäà çàïóñêàþòñÿ ñ ïîìîùüþ ñåðâåðà wscript.exe, ïðè÷åì â ýòèõ ñöåíàðèÿõ íå ïîääåðæèâàåòñÿ âûâîä íà ýêðàí óäàëåííîãî êîìïüþòåðà íèêàêèõ ýëåìåíòîâ ïîëüçîâàòåëüñêîãî èíòåðôåéñà (íå âûâîäÿòñÿ äàæå äèàëîãîâûå îêíà ñ ñîîáùåíèÿìè î âîçíèêàþùèõ â õîäå âûïîëíåíèÿ îøèáêàõ). Äðóãèìè ñëîâàìè, â óäàëåííûõ ñöåíàðèÿõ ïî óìîë÷àíèþ íåëüçÿ èñïîëüçîâàòü ìåòîäû

    WScript.Echo
    èëè
    WshShell.Popup
    (ýòî ìîæåò ïðèâåñòè ê íåïðåäñêàçóåìûì ðåçóëüòàòàì).

    Äëÿ ïðèìåðà ðàññìîòðèì ñöåíàðèé RemoteShortcut.js (ëèñòèíã 2.52), êîòîðûé ñîçäàåò ÿðëûê â ñïåöèàëüíîé ïàïêå AllUserDesktop (ðàáî÷èé ñòîë äëÿ âñåõ ïîëüçîâàòåëåé). Ïðåäïîëîæèì, ÷òî ýòîò ñöåíàðèé íàõîäèòñÿ â êîðíåâîì êàòàëîãå äèñêà D:, à çàïóñòèòü ñöåíàðèé íåîáõîäèìî íà êîìïüþòåðå \\Stand.

    Ëèñòèíã 2.52. Ñöåíàðèé äëÿ çàïóñêà íà óäàëåííîé ìàøèíå (JScript)

    /*****************************************************************/

    /* Èìÿ: RemoteShortcut.js                                        */

    /* Îïèñàíèå: Ñîçäàíèå ÿðëûêà íà ðàáî÷åì ñòîëå                    */

    /*****************************************************************/

    var WshShell,MyShortcut,PathTarg,PathShortcut;

    //Ñîçäàåì îáúåêò WshShell

    WshShell = WScript.CreateObject("WScript.Shell");

    //Îïðåäåëÿåì ïóòü ê ïàïêå "AllUsersDesktop" (ðàáî÷èé ñòîë

    //âñåõ ïîëüçîâàòåëåé)

    PathShortcut = WshShell.SpecialFolders("AllUsersDesktop");

    //Ñîçäàåì îáúåêò-ÿðëûê

    MyShortcut = WshShell.CreateShortcut(PathShortcut+ "\\From Remote WSH.lnk");

    //Óñòàíàâëèâàåì ïóòü ê ôàéëó

    PathTarg=WshShell.ExpandEnvironmentStrings("%windir%\\notepad.exe");

    MyShortcut.TargetPath = PathTarg;

    MyShortcut.Save();  //Ñîõðàíÿåì ÿðëûê

    /*************  Êîíåö *********************************************/

    Äëÿ çàïóñêà ñöåíàðèÿ RemoteShortcut.js íà óäàëåííîì êîìïüþòåðå \\Stand íóæíî ñîçäàòü äðóãîé ñöåíàðèé RunRemoteScript.js (ëèñòèíã 2.53). Çäåñü âíà÷àëå ñîçäàåòñÿ îáúåêò

    WshController
    :

    Controller = WScript.CreateObject("WshController");

    Çàòåì ìû ïîëó÷àåì ññûëêó íà ýêçåìïëÿð îáúåêòà

    WshRemote
    íà ìàøèíå \\Stand, ñîîòâåòñòâóþùèé ñöåíàðèþ ñ òåêñòîì, âçÿòûì èç ôàéëà D:\RemoteScript.js:

    RemScript = Controller.CreateScript("D:\\RemoteScript.js", "stand");

    Çàïóñêàåòñÿ óäàëåííûé ñöåíàðèé ñ ïîìîùüþ ìåòîäà

    Execute
    :

    RemScript.Execute();

    Ïîñëå ýòîãî íóæíî äîæäàòüñÿ îêîí÷àíèÿ ðàáîòû ñöåíàðèÿ íà óäàëåííîé ìàøèíå, ÷òî äåëàåòñÿ ïóòåì êîíòðîëÿ â öèêëå

    while
    ñâîéñòâà
    Status
    îáúåêòà
    WshRemote
    (çíà÷åíèå ñâîéñòâà status, ðàâíîå 2, ãîâîðèò î òîì, ÷òî âûïîëíåíèå óäàëåííîãî ñöåíàðèÿ çàâåðøåíî):

    while (RemScript.Status != 2)

     //Öèêë âûïîëíÿåòñÿ äî çàâåðøåíèÿ óäàëåííîãî ñöåíàðèÿ

     WScript.Sleep(100); //Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê

    Ìåòîä

    Sleep
    îáúåêòà
    WScript
    âûçûâàåòñÿ â öèêëå äëÿ òîãî, ÷òîáû îñâîáîäèòü ïðîöåññîð âî âðåìÿ îæèäàíèÿ çàâåðøåíèÿ óäàëåííîãî ñöåíàðèÿ (ëèñòèíã 2.53).

    Ëèñòèíã 2.53. Çàïóñê óäàëåííîãî ñöåíàðèÿ (JScript)

    /********************************************************************/

    /* Èìÿ: RunRemoteScript.js                                          */

    /* ßçûê: JScript                                                    */

    /* Îïèñàíèå: Çàïóñê óäàëåííîãî ñöåíàðèÿ                             */

    /********************************************************************/

    var Controller, RemScript;  //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshController

    Controller = WScript.CreateObject("WshController");

    //Ñîçäàåì ñöåíàðèé íà óäàëåííîé ìàøèíå (îáúåêò WshRemote)

    RemScript = Controller.CreateScript("D:\\RemoteScript.js", "stand");

    RemScript.Execute();  //Çàïóñêàåì óäàëåííûé ñöåíàðèé

    WScript.Echo("Óäàëåííûé ñöåíàðèé çàïóùåí");

    while (RemScript.Status != 2)

     //Öèêë âûïîëíÿåòñÿ äî çàâåðøåíèÿ óäàëåííîãî ñöåíàðèÿ

     WScript.Sleep(100);  //Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê

    WScript.Echo("Âûïîëíåíèå óäàëåííîãî ñöåíàðèÿ çàâåðøåíî");

    /*************  Êîíåö *********************************************/

    Â ëèñòèíãå 2.54 ïðèâåäåí àíàëîã ñöåíàðèÿ RunRemoteScript.js íà ÿçûêå VBScript.

    Ëèñòèíã 2.54. Çàïóñê óäàëåííîãî ñöåíàðèÿ (VBScript)

    '********************************************************************

    ' Èìÿ: RunRemoteScript.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Çàïóñê óäàëåííîãî ñöåíàðèÿ

    '********************************************************************

    Option Explicit

    Dim Controller, RemScript  ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshController

    Set Controller = WScript.CreateObject("WshController")

    ' Ñîçäàåì ñöåíàðèé íà óäàëåííîé ìàøèíå (îáúåêò WshRemote)

    Set RemScript = Controller.CreateScript("D:\\RemoteScript.js", "stand")

    RemScript.Execute  ' Çàïóñêàåì óäàëåííûé ñöåíàðèé

    WScript.Echo "Óäàëåííûé ñöåíàðèé çàïóùåí"

    While RemScript.Status <> 2

     ' Öèêë âûïîëíÿåòñÿ äî çàâåðøåíèÿ óäàëåííîãî ñöåíàðèÿ

     WScript.Sleep 100  ' Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê

    Wend

    WScript.Echo "Âûïîëíåíèå óäàëåííîãî ñöåíàðèÿ çàâåðøåíî"

    '*************  Êîíåö *********************************************

    Êîíòðîëèðîâàòü õîä âûïîëíåíèÿ óäàëåííûõ ñöåíàðèåâ ìîæíî íå òîëüêî ïóòåì àíàëèçà ñâîéñòâà

    Status
    , íî è ñ ïîìîùüþ îáðàáîòêè ñîáûòèé
    Start
    (çàïóñê ñöåíàðèÿ),
    Error
    (îøèáêà ïðè âûïîëíåíèè ñöåíàðèÿ) è
    End
    (çàâåðøåíèå ðàáîòû ñöåíàðèÿ) îáúåêòà WshRemote; ñîîòâåòñòâóþùèå ïðèìåðû ñöåíàðèåâ íà ÿçûêàõ JScript è VBScript ïðèâåäåíû â ëèñòèíãàõ 2.55 è 2.56.

    Íàïîìíèì, ÷òî äëÿ îáðàáîòêè ñîáûòèé îáúåêòà íóæíî â ñöåíàðèè ñíà÷àëà ñîçäàòü ýêçåìïëÿð ýòîãî îáúåêòà, à çàòåì ñîåäèíèòüñÿ ñ íèì ïðè ïîìîùè ìåòîäà

    ConnectObject
    , óêàçàâ íóæíûé ïðåôèêñ äëÿ ôóíêöèé-îáðàáîò÷èêîâ:

    Controller = WScript.CreateObject("WshController");

    RemScript = Controller.CreateScript("D:\\RemoteScript.js ", "stand");

    WScript.ConnectObject(RemScript, "RemoteScript_");

    Çàòåì â òåêñòå ñöåíàðèÿ îïèñûâàþòñÿ ôóíêöèè

    RemoteScript_Start
    ,
    RemoteScript_Error
    è
    RemoteScript_End
    , óïðàâëåíèå â êîòîðûå áóäåò ïåðåäàâàòüñÿ ïðè íàñòóïëåíèè ñîîòâåòñòâóþùèõ ñîáûòèé.

    Ëèñòèíã 2.55. Îáðàáîòêà ñîáûòèé îáúåêòà
    WshRemote
    (JScript)

    /**********************************************************************/

    /* Èìÿ: RemoteEvents.js                                               */

    /* ßçûê: JScript                                                      */

    /* Îïèñàíèå: Îáðàáîòêà ñîáûòèé, âîçíèêàþùèõ ïðè âûïîëíåíèè óäàëåííîãî */

    /*           ñöåíàðèÿ                                                 */

    /**********************************************************************/

    var Controller,RemScript,IsQuit;  //Îáúÿâëÿåì ïåðåìåííûå

    //Ñîçäàåì îáúåêò WshController

    Controller = WScript.CreateObject("WshController");

    //Ñîçäàåì ñöåíàðèé íà óäàëåííîé ìàøèíå (îáúåêò WshRemote)

    RemScript = Controller.CreateScript("D:\\RemoteScript.js ", "stand");

    //Óñòàíàâëèâàåì ñîåäèíåíèå ñ îáúåêòîì WshRemote

    WScript.ConnectObject(RemScript, "RemoteScript_");

    RemScript.Execute();  //Çàïóñêàåì óäàëåííûé ñöåíàðèé

    IsQuit = false;

    while (!IsQuit) WScript.Sleep(100);  //Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê

    WScript.Quit();  //Âûõîäèì èç ñöåíàðèÿ

    /***************  Ôóíêöèè-îáðàáîò÷èêè ñîáûòèé  ***********************/

    function RemoteScript_End() { //Ñîáûòèå End

     WScript.Echo("Âûïîëíåíèå óäàëåííîãî ñöåíàðèÿ çàâåðøåíî");

     IsQuit = true;

    }

    function RemoteScript_Error() { //Ñîáûòèå Error

     //Âûâîäèì íà ýêðàí îïèñàíèå âîçíèêøåé îøèáêè

     WScript.Echo("Îøèáêà ïðè âûïîëíåíèè óäàëåííîãî ñöåíàðèÿ: " +

      RemScript.Error.Description);

     IsQuit = true;

    }

    function RemoteScript_Start() { //Ñîáûòèå Start

     WScript.Echo("Óäàëåííûé ñöåíàðèé çàïóùåí");

    }

    /*************  Êîíåö *********************************************/

    Ëèñòèíã 2.56. Îáðàáîòêà ñîáûòèé îáúåêòà WshRemote (VBScript)

    '********************************************************************

    ' Èìÿ: RemoteEvents.vbs

    ' ßçûê: VBScript

    ' Îïèñàíèå: Îáðàáîòêà ñîáûòèé, âîçíèêàþùèõ ïðè âûïîëíåíèè óäàëåííîãî

    '           ñöåíàðèÿ

    '********************************************************************

    Option Explicit

    Dim Controller,RemScript,IsQuit  ' Îáúÿâëÿåì ïåðåìåííûå

    ' Ñîçäàåì îáúåêò WshController

    Set Controller = CreateObject("WshController")

    ' Ñîçäàåì ñöåíàðèé íà óäàëåííîé ìàøèíå (îáúåêò WshRemote)

    Set RemScript = Controller.CreateScript("D:\RemoteScript.js ", "stand")

    ' Óñòàíàâëèâàåì ñîåäèíåíèå ñ îáúåêòîì WshRemote

    WScript.ConnectObject RemScript, "RemoteScript_"

    RemScript.Execute  ' Çàïóñêàåì óäàëåííûé ñöåíàðèé

    IsQuit = False

    While Not IsQuit

     WScript.Sleep 100  ' Ïðèîñòàíàâëèâàåì ñöåíàðèé íà 0,1 ñåê

    Wend

    WScript.Quit ' Âûõîäèì èç ñöåíàðèÿ

    '***************  Ôóíêöèè-îáðàáîò÷èêè ñîáûòèé  ***********************

    Function RemoteScript_End()  ' Ñîáûòèå End

     WScript.Echo "Âûïîëíåíèå óäàëåííîãî ñöåíàðèÿ çàâåðøåíî"

     IsQuit = True

    End Function

    Function RemoteScript_Error()  ' Ñîáûòèå Error

     ' Âûâîäèì íà ýêðàí îïèñàíèå âîçíèêøåé îøèáêè

     WScript.Echo "Îøèáêà ïðè âûïîëíåíèè óäàëåííîãî ñöåíàðèÿ: " & _

      RemScript.Error.Description

     IsQuit = True

    End Function

    Function RemoteScript_Start()  ' Ñîáûòèå Start

     WScript.Echo "Óäàëåííûé ñöåíàðèé çàïóùåí"

    End Function

    '*************  Êîíåö *********************************************
     

    Çàìå÷àíèå

    Ïðè êîíòðîëå çà õîäîì âûïîëíåíèÿ óäàëåííîãî ñöåíàðèÿ ñ ïîìîùüþ îáðàáîòêè ñîáûòèé îáúåêòà

    WshRemote
    çàòðà÷èâàåòñÿ áîëüøå ðåñóðñîâ êîìïüþòåðà ïî ñðàâíåíèþ ñ ïðîñòîé ïðîâåðêîé ñâîéñòâà
    Status
    . Êðîìå ýòîãî, ïðè îáðàáîòêå ñîáûòèé óâåëè÷èâàåòñÿ ñåòåâîé òðàôèê ìåæäó ëîêàëüíîé è óäàëåííîé ìàøèíàìè. 









    Ãëàâíàÿ | Êîíòàêòû | Íàø¸ë îøèáêó | Ïðèñëàòü ìàòåðèàë | Äîáàâèòü â èçáðàííîå

    Âñå ìàòåðèàëû ïðåäñòàâëåíû äëÿ îçíàêîìëåíèÿ è ïðèíàäëåæàò èõ àâòîðàì.