HSPとExcel VBAで情報取得 (COMオブジェクトの活用)

1.概要

HSP3やExcel VBAでは、COM(コンポーネント・オブジェクト・モデル)が操作できます。 比較的簡単なパラメータを与えるだけで、Windows が持つシステムコンポーネントやフリーで公開されている 各種コンポーネントの機能を利用することでき ます。 HSP3が提供している命令群では、 COMオブジェクトの作成とインターフェースの取得、インターフェース ポインタからのメソッドの呼び出しなど豊富なオブジェクトアクセ ス手段が 提供されています。Excelにおいても、同じです。今回は、HSP3とExcel VBAを比較しながら 機能の確認をするためにCOM操作の入門として比較的移植や理解のしやすい WSH (Windows Script Host(以下WSH) を取り上げて見ました。WSHは、Windowsが標準でサポートするスクリプト環境で、テキストベースのスクリプトを 記述することで、従来のバッチに代わるものとして、GUI環境に頼らずにWindows環境でさ まざまな処理を実行できます。 尚、具体的なサンプル例などについては、何回かに分けて紹介していく予定です。

2.WSH(VBScript)の活用法について

WSHではスクリプト言語として、VBライクな言語であるVBScriptや、 JavaScriptライクなJScriptを標準で利用できます。 どちらのスクリプト言語を利用しても機能的には大き な違いはありません。HSP3からは、次のCOM関連命令を使って制御します。

HSP3のCOMオブジェクト操作関連命令

No.命令役割
1 newcom命令 COMオブジェクト型変数の新規作成
2 delcom命令 COMオブジェクト型変数の破棄
3 comres命令 メソッド返値代入変数を設定する
4 mcall命令 メソッドの呼び出し
5 comevent命令 COMイベントの取得開始
6 querycom命令 COMオブジェクト型変数の作成
7 axobj命令 ActiveXコントロールの配置
8 sarrayconv命令 Variant型との一括変換を行なう
9 comevarg命令 COMイベントのパラメーターを取得
10 comevdisp関数 COMイベントの内容を確認
11 #comfunc命令 外部COM呼び出し命令登録
12 #usecom命令 外部COMインターフェースの指定

Excel VBAの場合は、CreateObject関数で、ActiveX オブジェクトへの参照と作成して返します。 CreateObject関数を使う事で、参照設定することなくActiveX オブジェクトを使用できるようになります。 DimステートメントでObject型変数を作成して利用します。
HSP3からすべてを利用できるわけではないのですが、WSHの各オブジェクトの役割を簡単にまとめると次のようになります。 これらをHSP3のCOMオブジェクト操作関連命令で操作することになります。

WSHのオブジェクト一覧

No.オブジェクト役割
1 WScript オブジェクトの作成・接続、画面表示など
2 WshArguments コマンドライン引数にアクセスする
3 WshNamed 名前付きコマンドライン・パラメータにアクセスする
4 WshUnnamed 名前なしコマンドライン・パラメータにアクセスする
5 WshController リモート・スクリプト・プロセスを作成する
6 WshRemote コンピュータ・システムをリモートから管理する
7 WshRemoteError WshRemoteオブジェクトが異常終了した場合のエラー情報にアクセスする
8 WshShell ネットワーク共有の接続・切断など
9 WScript プログラムの実行・環境変数の操作など
10 WshShortcut ショートカットを作成する
11 WshUrlShortCut インターネット・リソースへのショートカットを作成する
12 WshScriptExec Exec()で実行したスクリプトに関するステータス情報、及びエラー情報を取得する
13 WshEnvironment 環境変数にアクセスする
14 WshSpecialFolders Windowsの専用フォルダにアクセスする

各オブジェクトについて、さらに詳細を知りたければMSDNのページやネット上のサイトや 書籍を参照して下さい。 それでは、WSH (VBScript)を利用してメモ帳を起動する簡単なスクリプトを例として、 HSP3での記述方法と 対比して見ましょう。
	'***** WSH (VBScript - Excel VBA)の場合 *****
	Dim wsh As Object

	Set wsh = CreateObject("Wscript.Shell")
	'***** メッセージを出力(WScript.Echoを RangeやMesBoxで代用する) *****
	MesBox  "メモ帳を起動します。"
	'***** wshの Runメソッドで notepad.exe を起動 *****
	wsh.Run "notepad.exe"
	'***** COMオブジェクト破棄 *****
	Set wsh = Nothing

	;***** HSPスクリプトの場合 *****
	;* newcom命令でプログラムIDと呼ばれる文字列(WScript.Shell)をパラメータとして
	;* 指定しwshというオブジェクト型変数に代入
	newcom wsh,"WScript.Shell"
	;***** WScript.Echoに相当する部分を mes命令やdialog命令で代用する *****
	dialog "メモ帳を起動します。"
	;***** wshの Runメソッドで notepad.exe を起動 *****
	wsh->"Run" "notepad.exe"
	;***** COMオブジェクト破棄 *****
	delcom wsh
VBScript(Excel VBA)とHSP3での記述方法の比較で判るように、 非常に似通っており移植性が高いと言えます。簡単なものであれば、 このような方法で書き換えることができます。 HSP3やExcel VBAの豊富な命令や関数、さらにWin32APIをコールして組み合わせれば、 応用範囲や適用範囲も拡大されることでしょう。

■関連記事
・HSPとExcel VBAで情報取得 (その1)
・HSPとExcel VBAで情報取得 (その2)
・HSPとExcel VBAで情報取得 (その3)
・HSPとExcel VBAで情報取得 (その4)

コメント

このブログの人気の投稿

Excelアドインで日本語形態素解析

階層構造JSONファイルの作成

HSPでコマンドプロンプトを制御する

TOP