|
||||
|
|
Ãëàâà 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. Çàìå÷àíèåËèñòèíã 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" Çàìå÷àíèå Êàê è ïðè èñïîëüçîâàíèè ìåòîäà 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. Çàìå÷àíèåËèñòèíã 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(ñîäåðæèò òîëüêî áåçûìÿííûå ïàðàìåòðû). Çàìå÷àíèå Äëÿ äîñòóïà ê êîëëåêöèÿì, ñîäåðæàùèì àðãóìåíòû êîìàíäíîé ñòðîêè, â ñöåíàðèè ñíà÷àëà íóæíî ñîçäàòü ïåðåìåííóþ-ýêçåìïëÿð îáúåêòà 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 ' Âûâîäèì ñôîðìèðîâàííûå ñòðîêè '************* Êîíåö ********************************************* Âûõîä èç ñöåíàðèÿ ñ îïðåäåëåííûì êîäîì çàâåðøåíèÿ Ëþáîå ïðèëîæåíèå ïðè çàâåðøåíèè ñâîåé ðàáîòû ìîæåò âîçâðàùàòü îïåðàöèîííîé ñèñòåìå öåëîå ÷èñëî — êîä âûõîäà (îáû÷íî íåíóëåâîå çíà÷åíèå ýòîãî êîäà óêàçûâàåò íà òî, ÷òî âûïîëíåíèå ïðîãðàììû ïðåðâàëîñü â ñèëó òîé èëè èíîé îøèáêè). Çàìå÷àíèå  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ñîîòâåòñòâóþùåãî ñîîáùåíèÿ íà ýêðàí. Çàìå÷àíèå Åñëè æå êîä çàâåðøåíèÿ ñöåíàðèÿ 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). Çàìå÷àíèå Ñíà÷àëà ñîçäàåòñÿ ãëàâíûé îáúåêò 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). Çàìå÷àíèå Äðóãèì âàðèàíòîì çàïóñêà èç ñöåíàðèÿ ïðèëîæåíèÿ Windows ÿâëÿåòñÿ ïðèìåíåíèå ìåòîäà Exec. Ýòîò ìåòîä çàïóñêàåò ïðèëîæåíèå, ïóòü ê êîòîðîìó óêàçàí êàê ïàðàìåòð ìåòîäà, è âîçâðàùàåò îáúåêò WshScriptExec. Íàïðèìåð: var WshShell = WScript.CreateObject("WScript.Shell"); var theNotepad = WshShell.Exec("calc"); Çàìå÷àíèå Îáúåêò 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). Çàìå÷àíèå Ðàññìîòðèì ïðèìåð ñöåíàðèÿ 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. Çàìå÷àíèå  ëèñòèíãàõ 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]); //Âûâîäèì ñòðîêè íà ýêðàí Çàìå÷àíèåËèñòèíã 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). Çàìå÷àíèå  ëèñòèíãå 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. Ñ ïîìîùüþ ýòîãî îáúåêòà ìîæíî: ? óçíàòü ñåòåâîå èìÿ êîìïüþòåðà, èìÿ òåêóùåãî ïîëüçîâàòåëÿ è íàçâàíèå äîìåíà, â êîòîðîì îí çàðåãèñòðèðîâàëñÿ; ? ïîëó÷èòü ñïèñîê âñåõ ñåòåâûõ äèñêîâ è âñåõ ñåòåâûõ ïðèíòåðîâ, ïîäêëþ÷åííûõ ê ðàáî÷åé ñòàíöèè; ? ïîäêëþ÷èòü èëè îòêëþ÷èòü ñåòåâîé äèñê è ïðèíòåð; ? óñòàíîâèòü ñåòåâîé ïðèíòåð â êà÷åñòâå ïðèíòåðà, èñïîëüçóåìîãî ïî óìîë÷àíèþ. Çàìå÷àíèå Îïðåäåëåíèå èìåí ðàáî÷åé ñòàíöèè, ïîëüçîâàòåëÿ è äîìåíà Äëÿ òîãî ÷òîáû èç ñöåíàðèÿ óçíàòü èìÿ òåêóùåãî ïîëüçîâàòåëÿ, äîìåíà è êîìïüþòåðà â ñåòè, ìîæíî èñïîëüçîâàòü ñîîòâåòñòâóþùèå ñâîéñòâà îáúåêòà 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). Çàìå÷àíèå  êà÷åñòâå ïðèìåðà ðàññìîòðèì 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 '************* Êîíåö ********************************************* Çàìå÷àíèå |
|
||
|
Ãëàâíàÿ | Êîíòàêòû | Íàø¸ë îøèáêó | Ïðèñëàòü ìàòåðèàë | Äîáàâèòü â èçáðàííîå |
||||
|
|
||||