COMの呼び出し(Ver8.22対応版)
目次− COMの呼び出し
 COM(Component Object Model)の呼び出しを扱うためのマクロの文があります。(V8.00以降)

createobject関数
WSHのCreateObjectと似ています。
失敗時は0が返ります。
ロードされるのは現在の秀丸エディタについてだけなので、nexthidemaru文等で他の秀丸エディタに切り替わった場合は改めてcreateobjectしなおす必要があります。
#obj=createobject("ProgID");

getobject関数
WSHのGetObjectと似ています。
失敗時は0が返ります。
ロードされるのは現在の秀丸エディタについてだけなので、nexthidemaru文等で他の秀丸エディタに切り替わった場合は改めてgetobjectしなおす必要があります。
#obj=getobject("filename.ext");
#obj=getobject("moniker:");
#obj=getobject("","ProgID");

releaseobject文
オブジェクトを解放します。
releaseobject #obj;

callmethod_returnstr関数
メソッドを呼び、文字列を取得します。
$s=callmethod_returnstr( #obj, $name, ... );

callmethod_returnnum関数
メソッドを呼び、数値を取得します。
#n=callmethod_returnnum( #obj, $name, ... );

callmethod_returnobj関数
メソッドを呼び、オブジェクトを取得します。
#obj=callmethod_returnobj( #obj, $name, ... );

callmethod文
メソッドを呼びます。
callmethod #obj, $name, ... ;

getpropstr関数
文字列プロパティを取得します。
$s=getpropstr(#obj,$name, ... );

getpropnum関数
数値プロパティを取得します。
#n=getpropnum(#obj,$name, ... );

getpropobj関数
オブジェクトプロパティを取得します。
#obj=getpropobj(#obj,$name, ... );

setpropstr文
文字列プロパティを設定します。
setpropstr #obj,$name,$s;

setpropnum文
数値プロパティを設定します。
setpropnum #obj,$name,#n;

setpropobj文
オブジェクトを設定します。
setpropobj #obj,$name,#objSet;

member文,member関数
callmethod,callmethod_*等やgetprop*等と同じです。
メソッド,プロパティ,型がわからないときに使用できます。
$s=member(#obj,$name, ... );
#n=member(#obj,$name, ... );
#obj=member(#obj,$name, ... );
member #obj,$name, ... ;

keepobject文
マクロが終了した後も解放しないようにするかを指示します。
keepobject #obj, #mode;
#mode=0の場合、マクロ終了後に自動解放します。
#mode=1の場合、マクロ終了後に自動解放しません。#objは再利用できません。
#mode=2の場合、マクロ終了後に自動解放しません。#objは再利用でき、後から再びマクロでreleaseobjectできます。
keepobject文を呼ばないときは、#mode=0の状態。
keepobject文を呼んで#mode省略時は#mode=1と同じ。

sleep文
一定時間待ちます。(ms)
sleep 1000;

getcollection関数
WSHのfor eachのようなことをします。(コレクションの操作)
#obj = getcollection( #obj, #operation, #count );
#operationはコレクションの操作方法を指定します。
0 (または省略)で次を取得。
1 でスキップ。
2 で最初に戻る。
3 で解放。
#countは、#operationが 1 のとき、スキップする数を指定します。

allowobjparam文(V8.20以降)
パラメータに1を指定すると、メソッドのパラメータが数値のとき、オブジェクトとして解釈することを許可します。
パラメータに2を指定すると、メソッドのパラメータが文字列のとき、16進数2桁が連続するバイトの配列(いわゆるバイナリデータ)として解釈することを許可します。メソッドの戻り値やプロパティが取得されるときは、バイナリを文字列として取得することを許可します。
0を指定するといずれも許可しません。
初期値は0で、数値はオブジェクトではなく数値そのまま、文字列は文字列のままとして解釈されます。
1や2を指定すると、数値や文字列としての解釈に失敗した場合にオブジェクトやバイトの配列として解釈します。
第2パラメータ以降を指定すると、メソッドのパラメータの種類を順番に1つずつ明示的に指定します。0はそのまま、1のとき数値はオブジェクト、2のとき文字列はバイナリデータとして最初から解釈します。
例:
 allowobjparam 1;
 callmethod #obj, $methodname, #obj1, #obj2;
 allowobjparam 0;
例:
 allowobjparam 2;
 $strBinary = getpropstr( #obj, $binaryproperty );
 callmethod #obj, $methodname, $strBinary;
 allowobjparam 0;
例:
 allowobjparam 2, 0, 0, 1, 2;
 $binaryRet = callmethod_returnstr( #obj, $methodname, #num1, $str2, #obj3, $binary4 );
 allowobjparam 0;


エラーの取得
 文はresultが設定されますが、関数ではresultは設定されません。
 crateobject/getobject以外の関数では戻り値で成功したかどうかを知ることができないので、getresultexでエラー情報を得ることができるようになっています。


サンプル


//プログラム起動
//WSH(VBS)
//	Set objShell = WScript.CreateObject("WScript.Shell")
//	objShell.Run "notepad.exe"

#objShell = createobject("WScript.Shell");
callmethod #objShell, "Run", "notepad.exe";
endmacro;


//エクセルのセル内容取得 //WSH(VBS) // Set objExcel = WScript.GetObject("c:\folder\test.xls") // WScript.Echo objExcel.Sheets("Sheet1").Cells(1,1) #objXls = getobject("C:\\folder\\test.xls"); #objSheet = member(#objXls, "Sheets", "Sheet1" ); #objCells = member( #objSheet, "Cells" ); #objCell = member(#objCells,"Item", 1,1); message member( #objCell ); //デフォルトのプロパティ endmacro;
//Webページの内容を挿入 #obj = createobject("InternetExplorer.Application"); setpropnum #obj,"Visible",1; callmethod #obj, "Navigate", "http://hide.maruo.co.jp/"; while(1){ if( getpropnum(#obj,"Busy") == 0 ) break; sleep 100; } //#obj.Document.body.innerText $a=getpropstr(getpropobj(getpropobj(#obj,"Document"),"body"),"innerText"); insert $a; releaseobject #obj; endmacro;
//ディスク容量一覧 //WSH(VBS) // Set DiskSet = GetObject("winmgmts:").InstancesOf ("Win32_LogicalDisk") // for each Disk in DiskSet // WScript.Echo Disk.FreeSpace // next insert "\nディスク容量一覧\n"; #objWMI = getobject("winmgmts:"); #objDisks = member( #objWMI, "InstancesOf", "Win32_LogicalDisk"); while( 1 ) { #objDisk = getcollection( #objDisks ); if( #objDisk == 0 ) break; insert member( member( #objDisk, "Properties_", "Name" ) ) + member( member( #objDisk, "Properties_", "FreeSpace" ) ) + "\n"; } #objDisk = getcollection( #objDisks, 3 ); releaseobject(#objWMI); endmacro;
//秀丸パブリッシャーをCOMを介して起動 #obj = createobject("hmpv.MainCls"); if( #obj != 0 ) { message "秀丸パブリッシャーのバージョン\n" + member( #obj, "Version" ); question "印刷します"; if( result == yes ) { callmethod #obj, "ShowDialog", hidemaruhandle(0); } } endmacro;
// DExplore(SDKドキュメントなど)を呼び出す getsearch; $keyword = searchbuffer; //通常の方法で開いたドキュメントから、このアドレスをコピーしてここに書く。 $url = "ms-help://MS.MSSDK.1041"; #obj = getobject("","DExplore.AppObj"); if(#obj==0){ #obj = createobject("DExplore.AppObj"); } member #obj, "SetCollection", $url, ""; member #obj, "DisplayTopicFromF1Keyword", $keyword; member #obj, "SyncIndex", $keyword, 1; keepobject #obj; //解放しないようにしないとウィンドウが消える endmacro;

戻る