WSH(Windows Script Host) for Worksのページ

最終更新日 2001/3/19 夢カウンタ

Windows98ではスクリプトによって、DOSのバッチファイルで行っていたような定型作業を自動化できます。なお、Windows95でもWSH(Windows Script Host)を入手して組み込めばスクリプトを実行できます。

1999年末にリリーズされたWSH 2.0、スクリプトエンジン5.1ではアプリケーションのキー操作ができるようになりました。このページではそれを利用してMS Worksを操作する方法を紹介します。

サンプルは個人的な好みのため基本的にJScriptです。また、ここに書く内容は私の環境(Windows98 + Works2000 一部は Works2001)で試した結果ではありますが、環境に依存します。スクリプトの使用は自己責任でね!

 WSH環境を確認する

 海外のフリーソフトを入手する

 Works2000ワープロを起動して日付を入力する

 Works2000スプレッドシートを起動して日付と時刻を入力する

 Works2000スプレッドシートのウィンドウを探して日付と時刻を入力する

 Windowsのマイドキュメントフォルダを変更する


WSH環境を確認する

下のスクリプトを切りとってVersionCheck.jsなどとして保存し、アイコンをダブルクリックするとWSHの環境を確認できます。

私のWindows XP SP3の場合「Windows Script Host 5.7 ,JScript 5.8.23141」と表示されます。(2011/4/17)

ダブルクリックしても何も起きない場合、あるいはバージョンが古い場合はマイクロソフトのWWWから入手して組み込みましょう。ドキュメントもダウンロードできます。

WScript.Echo(GetVersionInfo());
function GetVersionInfo()
{
  var s;
  s = WScript.Name+ " ";
  s += WScript.Version+ " ,";
  s += ScriptEngine() + " ";
  s += ScriptEngineMajorVersion() + ".";
  s += ScriptEngineMinorVersion() + ".";
  s += ScriptEngineBuildVersion() + " で実行中。";
  return(s);
}

海外のフリーソフトを入手する

WSH 2.0には、Sendkeysが装備されました。これを使って、アプリケーションにキー操作を送り、メニューなどを選んでやる訳です。しかし、SendKeysはキー操作そのものなので、2バイトコードは送れません。そこで、2バイトコードはクリップボード経由で貼り付けることにします。

ここで紹介するAutoItXはスクリプトからクリップボードに文字を送ることができます。これを使えばクリップボード経由で2バイトコードも入力できますので、ワープロで本文を作成するようなこともできるようになります。

AutoItXはWSHを拡張するActiveXコントロールです。ここでは主にクリップボードの機能を使いますが、WSH 2.0の機能を上回るウィンドウ操作もできてしまいます。(作者に感謝)

Author: Jonathan Bennett
URL: http://www.hiddensoft.com/AutoIt/ 

上のページのDownloadsのリンクからAutoItXの入ったexeをダウンロードします。AutoItではありません。また私が試しているのはAutoIt v2です。
AutoIt v2の公開は終わってしまったようです。v3ではオブジェクト名などを変更する必要があります。(2011/4/17)

【AutoItX.dllのインストール方法】

ダウンロードしたAutoItX.zipを解凍すると、AutoItX.dllとhtmlドキュメントなどが現われます。WSHから使うためには次の手順で、AutoItX.dllをレジストリに登録してやる必要があります。
(1)AutoItX.dllをc:\Windows\Systemにコピーします。
(2)MS-DOSプロンプトを起動し、cdコマンドでカレントフォルダをc:\Windows\Systemに移動します。
(3)右のコマンドを入力します。 >regsvr32 autoitx.dll
(*)ついでにアンストールはこうです。 >regsvr32 /u autoitx.dll

上記のように書いていましたが、必ずしもc:\Windows\Systemなどにコピーする必要はなさそうです。また、私はAutoItの機能にもそそられるものがあったのでFull Installationを選んでいます。そうするとAutoItX.dllも自動的にインストールされます。(2003/2/11)


Works2000ワープロを起動して日付を入力する

クリップボード経由で2バイトコードを入力します。

私の環境だと初回のクリップボードの処理に時間がかかるようで、入力が無視されることがありました。また、Ctrl+Vができませんでした。そこで目的の処理を行う前に、空白を入力してCtrl+Z(元に戻す)、Enterを入力してCtrl+Z、という空処理を行っています。

下のスクリプトはメモ.WPSを開いて最下行に移動し、日付と曜日を入力します。

var WpsFile = "d:\\memo\\メモ.WPS";
var Wsh = WScript.CreateObject("WScript.Shell");
var Aix = WScript.CreateObject("AutoItX.Control");
var IDOK=1, MB_OKCANCEL=1, MB_ICONQUESTION=32;

Wsh.Run (WpsFile);
Aix.WinWaitActive ("メモ.WPS", "");

Aix.Send ("^{end}");

if(IDOK==Wsh.Popup("今日の日付で書き込みますか?",
                0,"書き込みの確認",MB_OKCANCEL+MB_ICONQUESTION)){

  Aix.ClipPut (" ");     //この5行を入れると安定して動く
  Aix.Send ("^v");
  Aix.Send ("^z");
  Aix.Send ("{enter}");
  Aix.Send ("^z");


  Aix.ClipPut (DatePhrase());
  Aix.Send ("^v");
  Aix.Send ("{enter}");
}

function DatePhrase()
{
  var d, s="", daystr="日月火水木金土";
  d = new Date();
  s += (d.getMonth() + 1) + "月";
  s += d.getDate() + "日(";
  s += daystr.substr(d.getDay(),1) + ")";
  s = degit2DBCS(s);
  return(s);
}

function degit2DBCS(str)   //数字を2バイトコードにする関数
{
  var i, c, s="", degitstr="0123456789";
  for (i=0; i<=str.length-1; i++){
    c=str.substr(i,1);
  if (("0"<=c) & (c<="9"))
    s += degitstr.substr(c,1);
  else
    s += c;
  };
  return(s);
}


Works2000スプレッドシートを起動して日付と時刻を入力する

var WksProg = "\"C:\\Program Files\\Microsoft Works\\wksss.exe\"";
var Wsh = WScript.CreateObject("WScript.Shell");

Wsh.Run (WksProg);
WScript.Sleep (5000); //5秒待つ。適当に調節して下さい。

Wsh.SendKeys ("%EG");
//WScript.Sleep (100); //うまく動かなければ入れてみて下さい。
Wsh.SendKeys ("A1~");
//WScript.Sleep (100);
Wsh.SendKeys ("%OW");
//WScript.Sleep (100);
Wsh.SendKeys ("15~");
//WScript.Sleep (100);
Wsh.SendKeys ("^(;){RIGHT}");
//WScript.Sleep (100);
Wsh.SendKeys ("^(:)~");


Works2000スプレッドシートのウィンドウを探して日付と時刻を入力する

タイトルでウィンドウを探します。

var WinTitle = "新規スプレッドシート";
var Wsh = WScript.CreateObject("WScript.Shell");

Wsh.AppActivate (WinTitle);
Wsh.SendKeys ("%EG");
Wsh.SendKeys ("C1~");
Wsh.SendKeys ("%OW");
Wsh.SendKeys ("15~");
Wsh.SendKeys ("^(;){RIGHT}");
Wsh.SendKeys ("^(:)~");


Windowsのマイドキュメントフォルダを変更する

少々長いのでダウンロード形式にしました。

【説明】

 Microsoft Works2001では、保存フォルダのデフォルトがWindowsのマイドキュメントフォルダに固定になりました。このためマイドキュメントフォルダを簡単に変更するためのスクリプト(JScript)を作成してみました。なお、マイドキュメントフォルダをデフォルトにする他のアプリケーションにも影響しますのでご注意下さい。

このスクリプトではレジストリを2箇所書き換えます。たぶんWindows NTでは動作しません。が、レジストリキーを適切にすればなんとかなると思います。変更前にレジストリを読み取ります。読み取りエラー、又は2箇所が不一致であれば終了します。また、変更するフォルダが存在することを確認しています。

【インストールとアンインストール】

ダウンロードしたファイルCHMYDOCx.LZHをLHAなどで解凍して下さい。アンインストールは解凍されたファイルを消すだけです。

【使い方】

まず、スクリプト中のフォルダ名を変更する必要があります。メモ帳などのエディタで開き、New変数の個所を任意のフォルダ名に書き換えて保存して下さい。他のアプリケーション、特にWorksが終了していることを確認してスクリプトを実行して下さい。変更確認のダイアログにOKボタンを押すと変更されます。

【ヒント】
マイドキュメントフォルダを変更するにはマイクロソフトの非サポートツールTweak UIを使用するのが安全かつ簡単です。しかし、このスクリプトのエッセンスを使えば、Worksのファイルごとにマイドキュメントフォルダを変更するなどということも可能でしょう。
ダウンロードする(LHA書庫ファイルCHMYDOC1.LZH:2,567バイト)

  
akio_dot_shimada@nifty.ne.jp(spam対策) 島田明雄