Delphiのオートメーションサーバ機能を使用したマクロの実現
Mibarcodeへのオートメーションサーバ機能搭載が思いのほか簡単に実現できたことから、オートメーションサーバ機能で自分自身を制御できれば、VBスクリプト(VBS)やJavaスクリプト(JS)によるマクロ機能を実現できるのではないかと思い立ちました。実際に試してみた結果思ったとおりに動くことが判りました。実はこのアイディアは、Sleipnirのスクリプト機能のパクリです。
Delphiでのオートメーションサーバのつくり方(Delphi5での例)
初めに元になるアプリケーションを作成します。ここではわかりやすいようにTMemoを貼り付けた簡単なテキストエディタとしました。
次に、ファイルメニュー→新規作成で、ActiveXのタブページにあるオートメーションオブジェクトを選択します。

次に表示されるダイアログで、CoClass名に適当な名前をつけて(この名前がオブジェクトクラス名として公開されます)OKボタンを押します(他の設定は変える必要がありません)。

そうすると、以下のタイプライブラリエディタが表示されます。このエディタで、先ほど指定したCoClass名の先頭にIが付いた方(インターフェイス)を選択して、必要に応じてプロパティやメソッドを追加していきます。

ここで注意しなければならないのはメソッドの戻り値です。パラーメタのページにある、戻り値の型ではなく(この型は必ずHRESULTでなければならない)、パラメータで指定しなければなりません。
戻り値を必要とする場合(functionにする場合)はパラメータに名前と型を指定して、修飾子にoutとretvalを指定しなければなりません。また、型は必ずポインタにしなければなりません。
なおString型は使用できませんので、BSTR型(DelphiでのWideString型)を指定します。以下の例では、文字列を返すためにBSTR *(BSTRのポインタ型)を指定しています。

プロパティ,メソッドの追加を終えたら、タイプライブラリエディタのソースコードの更新ボタンを押して、ソースコードに追加したプロパティ,メソッドの処理部を追加します。
あとは、オートメーションサーバソースのUsesに元となるアプリケーションユニットを追加して、プロパティやメソッドの実際の処理を追加するだけです。

オートメーションサーバの登録と削除
DelphiのIDE上で作成したプロジェクトを実行すれば、自動的にオートメーションサーバの情報がレジストリに登録されます。
それ以外の環境にインストールする場合には、コマンドラインオプションを指定して実行することで登録,削除を行うことが出来ます。
登録
実行ファイル名 /regserver
削除
実行ファイル名 /unregserver
アプリケーションを配付する場合には、インストール,アンインストール用のバッチファイルを作成して、一緒に配付すればよいでしょう。
VBスクリプトによるマクロの例
'VBスクリプトによるマクロのサンプル
'
'乱数で星空を描く
'
Dim Ap, i, j, s
'オートメーションサーバオブジェクトを作成する
Set Ap = Createobject("Project1.App")
Randomize
For i = 0 to 25
s = ""
For j = 1 to 40
If Rnd < 0.1 Then
s = s + "☆"
Else
s = s + " "
End If
Next
'乱数で生成した☆と空白の文字列を追加する
Ap.SetLine i, s
Next
'オブジェクトを破棄する
Set ap = Nothing
サンプルプロジェクト
戻る