Az előzőekben láttuk, hogy a Windows Shellt hogyan lehet szkriptből megszólítani. Van egy másik COM objektum, a WScript, amelynek Shell alosztálya is hasonló célokat, de még mélyebb szinten valósít meg. Például szeretnénk egy olyan alkalmazással kommunikálni, amely nem COM alkalmazás, például a Notepaddal. Jobb híján billentyűzetleütéseket tudunk neki küldeni a WScript.Shell osztály SendKeys metódusával:
[1] PS C:\> $sh = new-object -com wscript.shell
[2] PS C:\> $sh.Run("notepad")
0
[3] PS C:\> $sh.AppActivate("notepad")
True
[4] PS C:\> $sh.AppActivate("notepad"); $sh.SendKeys("kakukk!")
True
Az [1]-es sorban elindítom a Notepad-et a Run metódussal. Aztán előtérbe helyezem az ablakát, hogy ő kapja a billentyűleütéseket, majd kiküldőm a billentyűzetütéseket. Az alábbi képernyőfotón látszik, hogy a kiadott karakterek tényleg beíródtak a Notepad szerkesztőfelületére.
141 . ábra Nem COM alkalmazás vezérlése WScrip.Shell objektummal
Bonyolultabb billentyűkombinációkat is küldhetünk (részletek: http://msdn.microsoft.com/en-us/library/8c6yea83(VS.85).aspx ), például egy „mentés másként” művelet:
$sh.AppActivate("notepad")
$sh.SendKeys("%(F)A") # Alt+F és A a ’Send As’ párbeszédablak
előhívásához
start-sleep 1 #
hagyjunk időt a megnyíláshoz
$sh.SendKeys("abcdefghijk.txt") # fájlnév kiküldése
start-sleep 1 # kis
várakozás
$sh.SendKeys("~") # Enter kiküldése
Nézzük ennek az objektumnak a tagjellemzőit:
[5] PS C:\> $sh | gm
TypeName: System.__ComObject#{41904400-be18-11d3-a28b-00104bd35090}
Name MemberType Definition
---- ---------- ----------
AppActivate Method bool AppActivate (Variant...
CreateShortcut Method IDispatch CreateShortcut ...
Exec Method IWshExec Exec (string)
ExpandEnvironmentStrings Method string ExpandEnvironmentS...
LogEvent Method bool LogEvent (Variant, s...
Popup Method int Popup (string, Varian...
RegDelete Method void RegDelete (string)
RegRead Method Variant RegRead (string)
RegWrite Method void RegWrite (string, Va...
Run Method int Run (string, Variant,...
SendKeys Method void SendKeys (string, Va...
Environment ParameterizedProperty IWshEnvironment Environme...
CurrentDirectory Property string CurrentDirectory (...
SpecialFolders Property IWshCollection SpecialFol...
Látható, hogy a billentyűleütések mellet többek között registry-szerkesztő, shortcut-létrehozó és dialógusablak-kirakó metódusai is vannak.
A WScriptnek nem csak Shell alosztálya van, hanem Network is. Ezzel számtalan hasznos, hálózattal kapcsolatos műveletet tudunk végrehajtani:
[10] PS I:\>$ws = New-Object -com WScript.Network
[11] PS I:\>$ws | gm
TypeName: System.__ComObject#{24be5a31-edfe-11d2-b933-00104b365c9f}
Name MemberType Definition
---- ---------- ----------
AddPrinterConnection Method void AddPrinterConnection (string...
AddWindowsPrinterConnection Method void AddWindowsPrinterConnection ...
EnumNetworkDrives Method IWshCollection EnumNetworkDrives ()
EnumPrinterConnections Method IWshCollection EnumPrinterConnect...
MapNetworkDrive Method void MapNetworkDrive (string, str...
RemoveNetworkDrive Method void RemoveNetworkDrive (string, ...
RemovePrinterConnection Method void RemovePrinterConnection (str...
SetDefaultPrinter Method void SetDefaultPrinter (string)
ComputerName Property string ComputerName () {get}
Organization Property string Organization () {get}
Site Property string Site () {get}
UserDomain Property string UserDomain () {get}
UserName Property string UserName () {get}
UserProfile Property string UserProfile () {get}
Nézzünk például egy hálózati meghajtók felsorolását:
[12] PS C:\> $ws = New-Object -com WScript.Network
[13] PS C:\> $ws.EnumNetworkDrives()
I:
\\K-FILE1\soostibor$