# SeraphyScriptDialogについて

## プロジェクト・ホーム

最新のリリース、ソースコードなどのSeraphyScriptDialogの開発状況は、http://sourceforge.jp/projects/seraphyscrtools/ を参照してください。

現在のバージョンはVer2.0 Preです。

## 概要説明

SeraphyScriptDialogは、VBScript/JScriptなどWSHで動作するスクリプト上でユーザー定義の簡易型ダイアログを作成できるようにするためのCOMオブジェクトです。

ダイアログの構成は非常に限定的で配置などの細かい指定はできませんが、をスクリプト上で簡単に定義することができます。

またダイアログへのファイルのドロップを許可することもできます。

ダイアログはモーダルだけでなく、モードレスとしても機能させることができます。(メッセージループの定義が必要ですが。)

これを使うとWSHなどのスクリプトに対話的な機能をつけることができ、自作ユーテリティの機能性向上にちょっとだけ寄与すると思います。

また、アウトプットウィンドウや、ファイル操作に関する、いくつかの補助機能も持っています。

### 特徴

- 簡単なUIの設定が可能。
  - フォームのレイアウトは非常に限定的で上から順に要素を並べることしかできませんが、そのかわり定義するのは非常に簡単です。
  - エディットボックスやファイル名入力、チェックボタン、ラジオボタン、リストボックス、プッシュボタンなどを定義できます。
- ファイルのドロップが可能
- モーダル・モードレスでのフォームの動作が可能
  - モーダルの場合、親ウィンドウがあれば親ウィンドウをディセーブルとし自フォームだけが操作可能となり、何らかのアクションが発生するまで制御を戻しません。
  - モードレスの場合、親ウィンドウをディセーブルにすることはなく、複数のフォームを同時に開いて操作することができますが、アクションの有無にかかわらず制御が戻るためループで処理する必要があります。
- おまけ機能(生い立ちによるもので、通常用途では、あまり有益ではないかもしれません。)
  - ファイル操作等に関する補助機能があります。
  - 文字列配列に関する補助機能があります。

### 変更点

ver1.1は2000年2月にVectorに公開されました。

その後、長らく更新していませんでしたが、Vista/Windows7発売にともなってx64版の問い合わせが何件かあったため、Ver2を作成しました。

Ver2では以下の点が変更されています。

- x86/x64の両対応としました。それぞれ別のDLLですが、使用方法はかわりません。
  x64のOSにおいて、両方をインストールした場合、起動するスクリプトホスト(WSH等)が64ビット版であるか、Wow64上で動作するx86版であるかにより自動的に切り替わります。
- UNICODEに対応しました。シフトJISでは表現できない文字を含むファイル名やテキストなどを処理することが可能となりました。(ただし、現在のところサロゲートペアの扱いは限定的です。普通の用途では問題ないと思います。)
- WindowsXP以降のVisualStyleに対応しました。
- ダイアログの表示位置や表示幅を変更できるようにしました。
- ファイル入力用のエディットボックス等にはオートコンプリートの機能を持たせました。
- 設定ファイル(ini)を使用する場合、ファイル名を指定しないとカレントディレクトリ上の「preference.ini」として使用します。
- ExitWindowsなど、WindowsXP以降で扱いが変わったAPIについてはWindowsXP以降の流儀に改めました。
- 内部的にはMFC(VC6)の実装からATL(Visual Studio 2008 SP1のVC)の実装に全面的に書き換えました。
- WSH2以降で利用可能なタイプライブラリの参照(wsf形式におけるreferenceタグ)が使用可能となりました。これにより定数をシンボルで参照できるようになっています。
- UNICODビルド版しかありません。つまり、Windows9x/MEはサポートしていません。

### 使い方

同梱されているヘルプファイルとサンプルを参照ください。

使い方は平易であるのでサンプルをみれば、すぐに理解できるものと思います。

オブジェクトのメソッド・プロパティの一覧は現在、Ver1.1のものを同梱しています。Ver2で、いくつか拡張されていますが、これらについてはヘルプの準備が間に合っていませんのでサンプルを参照ください。

使用できるメソッドやプロパティの一覧は、ソースファイルの中にある「SeraphyScriptDialog.idl」に一覧できるようになっていますので、新しく追加されたメソッドやプロパティについてはソースよりご確認ください。

これらは、いずれHTMLヘルプに修正する予定です。

なお、同梱されているヘルプファイルはWinHelp形式です。Vista以降の環境にはWinHelpが標準ではインストールされなくなったため、WinHelpで閲覧するためにはマイクロソフトのサイトより、それぞれのOS用のWinHelpをダウンロードしてご使用ください。

### SeraphyScriptDialogの利用環境についての技術的な注意事項

- スレッドの制約について
  - SeraphyScriptDialogはUI用コンポーネントでの標準であるSTA(シングルスレッドアパートメント)となっています。
  - 現在のWSHもシングルスレッドでの動作のようですので、WSHで使う分には問題ないと思いますが、 ActiveScriptHostをサポートするマルチスレッドなアプリケーションでの使用については正しく動作しない可能性があります。
  - WSHは現在のところ自分のUI要素をもっていないため、SeraphyScriptDialog単体で使用する分には問題はありません。
  - なお、通常のGUI要素をもつアプリケーションは、Windowsの構造上、シングルスレッドであることが殆どです。(マルチスレッドとしている部分があるとしてもGUIとは独立していると思われます。)
- モードレス表示、メッセージループについて
  - SeraphyScriptDialogのDoEventsメソッド、およびWaitEventメソッドはアプリケーションのメッセージキューを処理します。
  - このときアプリケーション上に他のUI要素がある場合には、そのUIのメッセージも処理することになるため、アプリケーションの構造によっては予期せぬ結果になる可能性があります。
  - スクリプトを動作させながらほかの要素も操作できるため擬似的にマルチスレッド的に見えるかもしれませんが、おそらく、再入可能になっていない部分がある場合にはアプリケーションは異常となる可能性が非常に高いです。
  - これはアプリケーションの問題ではなく(また、SeraphyScriptDialogの問題でもなく)メカニズム的に、そのようなものだとご理解ください。
  - なお、モードレスの場合、親ウィンドウはディセーブル状態となるので問題となる可能性はずっと低くなると思われます。
- モーダル表示について
  - 旧バージョンのモーダル表示はMFCのCDialog::DoModalメソッドを単純に呼び出していました。
  - Ver2では実質的にモーダルもモードレスと同じようにメッセージを処理しています。
  - モーダルがモードレスと違なる点は、
    - イベントが発生するまでスクリプト側に制御を戻さない
    - 現在アクティブなウィンドウをディセーブルにしてからフォームを構築する
    となります。

## 動作環境

以下の環境での動作が想定されています。

### OS

以下のいずれかのOSで動作します。

- Windows 2000 Professional (Service Pack4以降)
- Windows XP Professional (Service Pack2以降)
- Windows XP Home (Service Pack2以降)
- Windows XP x64
- Windows Vista
- Windows Vista x64
- Windows Server 2003/R2
- Windows Server 2003/R2 x64
- Windows 7
- Windows 7 x64
- Windows Server 2008/R2
- Windows Server 2008/R2 x64

## ライセンスと使用許諾条件

ライセンスは、Apache License 2.0 準拠とします。

商用・非商用を問わず誰でも自由にご利用いただいてかまいません。

本アプリケーションは完全に無保証です。本アプリケーションを使用した、いかなる結果についても作者および再配布者は責任を負いません。

最終利用者自身の責任の範囲においてご利用ください。

ソフトウェアの改変と再配布も自由です。

ただし、本ソフトウェアがCOMオブジェクトであるという性質からバージョン管理の必要があるため、 もし、改変したものを独自に配布する場合には、COMのProgID、CLSID、LIBID等をSeraphyScriptDialogと重ならない別のものに変えてください。

SeraphyScriptDialogの修正に加えた方がよいと思われる場合は、sourceforge.jpのSeraphyScriptToolsのページでパッチもしくはソース全体を投稿してください。

## インストールとアンインストール

### SeraphyScriptDialogのインストール方法

SeraphyScriptDialogはセルフレジストラになっていますので、任意のフォルダにdllをコピーしたあと、regsvr32ツールを使って登録できます。

ただし、インストール方法はX86/X64版で若干異なりますので、使用環境、使用方法に応じて以下を参考にレジストリに登録してください。

もしくは技術情報を参考にして自分でレジストリに登録してもかまいません。

regsvr32の実行には管理者権限が必要です。Vista以降の場合、コマンドプロンプトからregsvr32を実行する場合にはコマンドプロンプトを管理者権限で開いてください。

- 32ビット版OSの場合(Windows2000/XP/2003/Vista/2008/Windows7)
  - 過去バージョン(Version1.1)が存在する場合について
    1. SeraphyScriptDialog.dllの登録に先立ち、まず、古いバージョン(SCRDLG.dll)をレジストリより登録解除してください。
    2. regsvr32.exe /u SCRDLG.DLL でレジストリから解除できます。(パスは配置した場所を適宜に指定してください。)
    3. 解除後、SCRDLG.DLLは任意でゴミ箱に入れてください。
  - Ver2.0のレジストリへの登録方法
    1. regsvr32.exe SeraphyScriptDialog.dll としてレジストリに登録してください。(パスは配置した場所を適宜に指定してください。)
    2. これによりレジストリにCOMオブジェクトが登録され、スクリプト上から使えるようになります。
    3. 登録される内容については技術情報を参照してください。
- 64ビット版OSの場合(WindowsXP/2003/Vista/2008/Windows7)
  - これらの64ビット版OSには、Wow64により、32ビット環境と64ビット環境の2つのモードがあります。
  - 通常、VBScript/JScriptをホストするWSHは64ビット版になっており、64ビット版WSHから作成できるオブジェクトは64ビット版DLLでなければなりません。
  - もし、64ビット版WSHからSeraphyScriptDialogを使用する場合は、64ビット版のSeraphyScriptDialogX64.dllを登録してください。
  - もし、従来の32ビット版のWSHからSeraphyScriptDialogを使用する場合は、32ビット版のSeraphyScriptDialog.dllを登録してください。
  - 過去バージョン(Version1.1)が存在する場合について
    1. SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllの登録に先立ち、まず、古いバージョン(SCRDLG.dll)をレジストリより登録解除してください。
    2. C:\Windows\SysWow64\regsvr32.exe /u SCRDLG.DLL (Windows7の例。パスは配置した場所を適宜に指定してください。)
    3. 解除後、SCRDLG.DLLは任意でゴミ箱に入れてください。
  - x64版(64ビット版)のレジストリへの登録方法
    1. regsvr32.exe SeraphyScriptDialogX64.dll で登録できます。(パスは配置した場所を適宜に指定してください。)
       (Wow64上で動作する32ビット版のregsvr32.exeではないことに注意してください。)
    2. これによりレジストリにCOMオブジェクトが登録され、64ビット版のWSHからのスクリプト上で利用可能となります。
    3. 登録される内容については技術情報を参照してください。
  - x86版(32ビット版)のレジストリへの登録方法
    1. C:\Windows\SysWow64\regsvr32.exe SeraphyScriptDialog.dll で登録できます。(パスは配置した場所を適宜に指定してください。)
       (Wow64上で動作する32ビット版のregsvr32.exeであることに注意してください。)
    2. これによりレジストリにCOMオブジェクトが登録され、32ビット版のWSHからのスクリプト上で利用可能となります。
    3. 登録される内容については技術情報を参照してください。
  - x64とx86の両方のみ登録について
    - 64ビット環境では、SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllの双方を登録しても問題ありません。
    - レジストリ上に登録されるProgID、CLSID、LIBID等は64/32版ともに全く同じですが、 Wow64ではレジストリのリダイレクトが行われるため、実際に使用されるDLLは起動しているWSHが32/64ビット版であるかによって自動的に切り替えられることになります。
- version1.1(SCRDLG.DLL)との共存について(参考までに)
  - SCRDLG.DLLは既定のProgIDしかもっておらず、バージョン付きProgIDをもっていないため、そのままでは共存できません。
  - しかし、SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllではバージョンつきProgIDとして「SeraphyScriptDialog.2」というシグネチャをもっているため、 SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllをレジストリに登録後、SCRDLG.DLLを手動でレジストリに登録し、「SeraphyScriptDialog.1」のProgIDとすることで、 たとえば「CreateObject("SeraphyScriptDialog.1")」のようにしてバージョンつきで使用するようにできます。
  - これらのレジストリへの登録は技術情報を参考に「必ず手動で」行ってください。
  - regsvr32ツールで登録しますと、レジストリの現在の登録が上書きされてしまうためSeraphyScriptDialogが動作しなくなります。
  - なお、SCRDLG.DLLは32ビット且つMBCS版(非UNICODE)ですので、64ビット環境で動作させるにはWow64上のWSHを使用する必要があります。

### SeraphyScriptDialogのアンインストール方法

SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllをregsvr32ツールで登録した場合、regsvr32のオプション/u を指定することで登録解除できます。

レジストリへの登録を手動で行っている場合は、手動で削除してください。

レジストリから解除したあとは、dllは削除してかまいません。

## 技術情報

カスタマイズやインストール後のトラブルを解析するために必要となるかもしれない、いくつかの技術情報について記述します。

### SeraphyScriptDialog.2.reg(Windows7での一例です。)

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog]
    @="SeraphyScriptDialog Class"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog\CLSID]
    @="{4019FCE4-1A3B-4BFF-BF84-C036195842EF}"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog\CurVer]
    @="SeraphyScriptDialog.2"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog.2]
    @="SeraphyScriptDialog Class"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog.2\CLSID]
    @="{4019FCE4-1A3B-4BFF-BF84-C036195842EF}"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}]
    @="SeraphyScriptDialog Class"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\InprocServer32]
    @="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug\\SeraphyScriptDialogX64.dll"
    "ThreadingModel"="Apartment"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\ProgID]
    @="SeraphyScriptDialog.2"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\Programmable]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\TypeLib]
    @="{8C5ED098-A33E-4B09-8E44-638CCF6307A8}"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\Version]
    @="2.0"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\VersionIndependentProgID]
    @="SeraphyScriptDialog"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0]
    @="SeraphyScriptDialog 2.0 タイプ ライブラリ"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0\win64]
    @="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug\\SeraphyScriptDialogX64.dll"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\FLAGS]
    @="0"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\HELPDIR]
    @="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\SeraphyScriptDialog.DLL]
    "AppID"="{C781EBBC-836D-4DB3-B100-16A2BEE5F503}"

### SeraphyScriptDialog.2.wow64.reg(Windows7での一例です。)

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\AppID\SeraphyScriptDialog.DLL]
    "AppID"="{C781EBBC-836D-4DB3-B100-16A2BEE5F503}"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}]
    @="SeraphyScriptDialog Class"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\InprocServer32]
    @="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\Win32\\Debug\\SeraphyScriptDialog.dll"
    "ThreadingModel"="Apartment"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\ProgID]
    @="SeraphyScriptDialog.2"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\Programmable]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\TypeLib]
    @="{8C5ED098-A33E-4B09-8E44-638CCF6307A8}"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\Version]
    @="2.0"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\VersionIndependentProgID]
    @="SeraphyScriptDialog"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0]
    @="SeraphyScriptDialog 2.0 タイプ ライブラリ"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0\win32]
    @="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\Win32\\Debug\\SeraphyScriptDialog.dll"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0\win64]
    @="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug\\SeraphyScriptDialogX64.dll"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\FLAGS]
    @="0"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\HELPDIR]
    @="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug"

### SeraphyScriptDialog.1.wow64.reg(ver1.1との共存、Windows7での一例です。)

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog.1]
    @="SeraphyScriptDialog Class"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog.1\CLSID]
    @="{86893BFE-A779-4685-8FC9-D63C8827C4C9}"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{86893BFE-A779-4685-8FC9-D63C8827C4C9}]
    @="SeraphyScriptDialog"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{86893BFE-A779-4685-8FC9-D63C8827C4C9}\InProcServer32]
    @="D:\\Media\\MYDOCU~1\\VISUAL~2\\Projects\\SCRDLG\\RELEASED\\scrdlg.dll"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{86893BFE-A779-4685-8FC9-D63C8827C4C9}\ProgID]
    @="SeraphyScriptDialog.1"