Windows Script Host (WSH) - сервер сценариев Windows - стандартный компонент, включенный в операционную систему Windows начиная с Windows 98/ME/2000.

В предыдущих версиях его нужно устанавливать отдельно. Последнюю версию WSH можно получить на сайте Microsoft по адресу http://msdn.microsoft.com/scripting. Также можно произвести обновление WSH чтобы воспользоваться новыми возможностями, если у вас старая версия.

Изначально в операционной системе DOS можно было создавать командные файлы (.bat), которые являлись простейшими скриптами. Но даже используя усовершенствованный интерпретатор cmd.exe в Windows XP невозможно избавиться от значительных ограничений, используя командные файлы трудно работать, не считая многих других ограничений, с реестром Windows и COM объектами. WSH позволяет значительно большее. С помощью WSH можно выполнять в операционной системе сценарии, написанные на произвольных языках программирования, для этого должны быть установлены специальные модули - называемые Scripting Engine. Изначально устанавливаются модули поддержки JScript и VBScript. При установке ActivePerl по умолчанию устанавливает PerlScript.

Сценариями WSH являются файлы js - соответствующие языку JScript, vbs - VBScript и файлы wsf.

В файлах wsf - может быть помещен сценарий на произвольном языке:

файл имеет вид:

<job [id=JobID]>
	<script language=LanguageID>
		
		...

	</script>
</job> 

Где JobID - некоторое строковое значение, LanguageID - определяет язык, например JScript, VBScript, PerlScript.

Пример на языке Perl:

<job>
	<script language=PerlScript>

		...

	</script>
</job> 

В каталоге где установлено WSO в подкаталоге Demo\WSH можно увидеть примеры с использованием языков JScript, VBScript, Perl.

В скриптах WSH можно использовать объекты WSH, например объект WScript.

С помощью этого объекта можно определять обработчики событий с использованием его методов: ConnectObject и DisconnectObject.

Метод ConnectObject имеет первый аргумент - объект, а второй - префикс у набора функций, которые будут считаться обработчиками событий.

Пример на Perl:

<job>
<script language=PerlScript>

use Win32::OLE qw( EVENTS );

$o = Win32::OLE->new("Scripting.WindowSystemObject") or die("Oops!");

$f = $o->CreateForm(0,0,0,0);

$f->{ClientWidth} = 600;
$f->{ClientHeight} = 400;
$f->CenterControl();

$f->TextOut(10,10,"This sample shows how to create 1st level event handler in Perl using Windows Script Host");
$f->TextOut(10,30,"(see \"Event Handling\" in WSO.CHM).");
$f->TextOut(10,50,"In this sample we create a handler of the button OnClick event");

$b = $f->CreateButton(10,100,75,25,"Button");

$WScript->ConnectObject($b,"ButtonEvents_");

sub ButtonEvents_OnClick{
	$f->MessageBox("Button OnClick Event Handler");
}

$f->TextOut(150,80,"Program text:");
$Edit = $f->CreateEdit(150,100,420,280,$o->Translate("ES_MULTILINE | ES_READONLY"));
$Edit->{ScrollBars} = $o->Translate("SS_BOTH");

$fs = Win32::OLE->new("Scripting.FileSystemObject") or die("Oops!");

$file = $fs->OpenTextFile($WScript->{ScriptFullName},1,false);
$WScript->{Interactive} = false;
$Edit->{Text} = $file->ReadAll();
$WScript->{Interactive} = true;

$f->Show();

$o->Run();

</script>
</job>

Заметки:
Используя Perl следует помнить что в отличие от стандартных методов задания событий в Perl при задании обработчиков методом ConnectObject в обработчики событий попадают только параметры от WSO, дополнительные параметры от Perl отсутствуют.
Пример на JScript:

//WindowSystemObject (WSO) sample
//Copyright (C) Veretennikov A. B. 2004 

o = new ActiveXObject("Scripting.WindowSystemObject");

var f = o.CreateForm(0,0,0,0);

f.ClientWidth = 600;
f.ClientHeight = 400;
f.CenterControl();

f.TextOut(10,10,"This sample shows how to create 1st level event handler in JScript");
f.TextOut(10,30,"(see \"Event Handling\" in WSO.CHM).");
f.TextOut(10,50,"In this sample we create a handler of the button OnClick event");

b = f.CreateButton(10,100,75,25,"Button");

WScript.ConnectObject(b,"ButtonEvents_");

function ButtonEvents_OnClick(Sender)
{
	f.MessageBox("Button OnClick Event Handler");
}

f.TextOut(150,80,"Program text:");
Edit = f.CreateEdit(150,100,420,280,o.Translate("ES_MULTILINE | ES_READONLY"));
Edit.ScrollBars = o.Translate("SS_BOTH");
fs = new ActiveXObject("Scripting.FileSystemObject");
file = fs.OpenTextFile(WScript.ScriptFullName,1,false);
WScript.Interactive = false;
Edit.Text = file.ReadAll();
WScript.Interactive = true;

f.Show();

o.Run();

Пример на VBScript:

'WindowSystemObject (WSO) example
'Copyright (C) Veretennikov A. B. 2004 

Set o = WScript.CreateObject("Scripting.WindowSystemObject")

Set f = o.CreateForm(0,0,0,0)
f.ClientWidth = 600
f.ClientHeight = 400
f.CenterControl()

f.TextOut 10,10,"This sample shows how to create 1st level event handler in VBScript"
f.TextOut 10,30,"(see ""Event Handling"" in WSO.CHM)."
f.TextOut 10,50,"In this sample we create a handler of the button OnClick event"

Set b = f.CreateButton(10,100,75,25,"Button")

WScript.ConnectObject b,"ButtonEvents_"

Sub ButtonEvents_OnClick(Sender)
	f.MessageBox "Button OnClick Event Handler" 
End Sub

f.TextOut 150,80,"Program text:"
Set Edit = f.CreateEdit(150,100,420,280,o.Translate("ES_MULTILINE | ES_READONLY"))
Edit.ScrollBars = o.Translate("SS_BOTH")
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set file = fs.OpenTextFile(WScript.ScriptFullName,1,false)
WScript.Interactive = false
Edit.Text = file.ReadAll()
WScript.Interactive = true

f.Show()
o.Run()

Документация по WSO 1.1. Последние изменения:Wed Aug 12 18:10:22 2015. (C) Веретенников А. Б. 2004-2015