次の方法で共有


アプリケーションを操作する

WSH を使用して、アプリケーションを起動できます。次のスクリプトは、それらの機能の使用例を示しています。

ローカル サーバー アプリケーションを作成する

Microsoft Word などいくつかのアプリケーションは、プログラムからアクセス可能なオブジェクトを公開しています。次のスクリプトは、Word のスペル チェック機能の使用例を示しています。

// JScript.
var Word, Doc, Uncorrected, Corrected;
var wdDialogToolsSpellingAndGrammar = 828;
var wdDoNotSaveChanges = 0;
Uncorrected = "Helllo world!";
Word = new ActiveXObject("Word.Application");
Doc = Word.Documents.Add();
Word.Selection.Text = Uncorrected;
Word.Dialogs(wdDialogToolsSpellingAndGrammar).Show();
if (Word.Selection.Text.length != 1) 
   Corrected = Word.Selection.Text;
else
   Corrected = Uncorrected;
Doc.Close(wdDoNotSaveChanges);
Word.Quit();

' VBScript.

Dim Word, Doc, Uncorrected, Corrected
Const wdDialogToolsSpellingAndGrammar = 828
Const wdDoNotSaveChanges = 0

Uncorrected = "Helllo world!"
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Add
Word.Selection.Text = Uncorrected
Word.Dialogs(wdDialogToolsSpellingAndGrammar).Show

If Len(Word.Selection.Text) <> 1 Then 
Corrected = Word.Selection.Text
Else
   Corrected = Uncorrected
End If

Doc.Close wdDoNotSaveChanges
Word.Quit

Shell.Exec コマンドを使ってプログラムを生成する

Shell.Exec コマンドは Shell.Run メソッドにはない追加機能を備えています。たとえば、次のような機能があります。

  • 強化された環境変数の引き渡し機能
  • 実行可能ファイルの標準ストリームにアクセスする機能

次の VBScript コードは、標準ストリームと Shell.Exec コマンドを使って、指定した正規表現に一致するファイル名のファイルが存在するかどうかディスク内を検索する例を示しています。

まず、次のスクリプトで、現在のディレクトリおよびそのサブディレクトリにあるすべてのファイルの絶対パスを StdOut に出力します。

' VBScript.
'  MYDIR.VBS
Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
DoDir FSO.GetFolder(".")
Sub DoDir(Folder)
   On Error Resume Next
   Dim File, SubFolder
   For Each File In Folder.Files
      WScript.StdOut.WriteLine File.Path
   Next
   For Each SubFolder in Folder.SubFolders
      DoDir SubFolder
   Next
End Sub

次に、以下のスクリプトにより、StdIn 内でパターンに一致する行を検索し、それらをすべて StdOut に出力します。

' MyGrep.VBS
Option Explicit
Dim RE, Line
If WScript.Arguments.Count = 0 Then WScript.Quit
Set RE = New RegExp
RE.IgnoreCase = True
RE.Pattern = WScript.Arguments(0)
While Not WScript.StdIn.AtEndOfStream
   Line = WScript.StdIn.ReadLine
   If RE.Test(Line) Then WScript.StdOut.WriteLine Line
WEnd

この 2 つのスクリプトを組み合わせると目的の処理を実行できます。1 つのプログラムではディレクトリ ツリー内のすべてのファイルを一覧表示し、もう 1 つのプログラムでは指定した正規表現に一致する行を検索します。ここで第 3 のプログラムを用意し、この 2 つの処理を両方とも実行させます。このプログラムは、オペレーティング システムを使ってプログラム間で情報をパイプし、さらにその結果を自身の StdOut にパイプします。

// MyWhere.JS
if (WScript.Arguments.Count() == 0)
   WScript.Quit();
var Pattern = WScript.Arguments(0);
var Shell = new ActiveXObject("WScript.Shell");
var Pipe = Shell.Exec("%comspec% /c \"cscript //nologo mydir.vbs | cscript //nologo mygrep.vbs " + Pattern + "\"");
while(!Pipe.StdOut.AtEndOfStream)
   WScript.StdOut.WriteLine(Pipe.StdOut.ReadLine());

参照

基本的な Windows Script Host タスク | Exec メソッド | Run メソッド