COMの呼び出しサンプル(Ver9.35対応版)
目次−
COMの呼び出し−
サンプル
COMオブジェクトの呼び出しサンプルです。
●プログラム起動
//WSH(VBS)
// Set objShell = WScript.CreateObject("WScript.Shell")
// objShell.Run "notepad.exe"
#objShell = createobject("WScript.Shell");
callmethod #objShell, "Run", @"notepad.exe";
endmacro;
●FileSystemObjectを使ったファイルの書き込み
$file = @"C:\Folder\TestLog.txt";
call WriteLineUnicode, $file, "書き込み内容1";
call WriteLineUnicode, $file, "書き込み内容2";
endmacro;
WriteLineUnicode:
##objFso = createobject("Scripting.FileSystemObject");
##objFile = member(##objFso,"OpenTextFile"
, $$1 //filename
, 8 //iomode : ForAppending 8
, 1 //create
, -1 //format : TristateTrue(Unicode) -1
);
member ##objFile,"WriteLine",$$2;
member ##objFile,"Close";
releaseobject ##objFile;
releaseobject ##objFso;
return;
●FileSystemObjectを使ったファイルの読込み
$file = @"C:\Folder\TestLog.txt";
call ReadLineUnicode, $file;
message "1行目:\n"+$$return;
call ReadLineUnicode, $file;
message "2行目:\n"+$$return;
endmacro;
ReadLineUnicode:
//グローバル変数: $fileRLU #objFileRLU #objFsoRLU
if( #objFsoRLU == 0 ) {
#objFsoRLU = createobject("Scripting.FileSystemObject");
}
if($fileRLU!=$$1||$$1==""||$fileRLU==""){
if( #objFileRLU != 0 ) {
member #objFileRLU,"Close";
releaseobject #objFileRLU;
#objFileRLU = 0;
}
$fileRLU = $$1;
}
if( #objFileRLU == 0 ) {
#objFileRLU = member(#objFsoRLU,"OpenTextFile"
, $fileRLU //filename
, 1 //iomode : ForReading 1
, 0 //create
, -1 //format : TristateTrue(Unicode) -1
);
}
$$strLine = member(#objFileRLU,"ReadLine");
//releaseobject #objFsoRLU;はしない
return $$strLine;
●FileSystemObjectを使ったファイルの列挙
$dir = @"C:\Folder";
newfile;
insert $dir + "\n";
#objFSO = createobject("Scripting.FileSystemObject");
#objFolder = callmethod_returnobj(#objFSO,"GetFolder",$dir);
#objFiles = getpropobj(#objFolder,"Files");
#c = getpropnum(#objFiles,"Count");
insert "ファイル数=" + str(#c) + "\n";
while(1){
#objFile = getcollection(#objFiles);
if( #objFile == 0 ) break;
insert getpropstr(#objFile,"Name") + "\n";
releaseobject #objFile;
}
releaseobject #objFiles;
releaseobject #objFolder;
releaseobject #objFSO;
endmacro;
参考:
memberを使う方法もあります。
●FileSystemObjectを使ったファイルやドライブの情報取得
#objFSO = createobject("Scripting.FileSystemObject");
$strPath = @"C:\Folder\File.txt";
message $strPath + "\n"
+ member( #objFSO, "GetDriveName", $strPath ) + "\n"
+ member( #objFSO, "GetFileName", $strPath ) + "\n"
+ member( #objFSO, "GetBaseName", $strPath ) + "\n"
+ member( #objFSO, "GetExtensionName", $strPath ) + "\n"
+ member( #objFSO, "GetParentFolderName", $strPath );
releaseobject #objFSO;
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;
●ディスク容量一覧
//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;
●フォルダ内の各ファイルに対してマクロを実行
newfile;
$targetFolder = directory2;
$targetExt = "txt";
$targetMacro = @"test_each_file.mac";
/*
test_each_file.macの例:
message filename2;
endmacro;
*/
question
"フォルダ内の各ファイルにマクロを実行します。\n"+
"よろしいですか?\n\n"+
"対象フォルダ:\n"+$targetFolder+"\n\n"+
"対象拡張子:\n"+$targetExt+"\n\n"+
"マクロ:\n"+$targetMacro+"\n\n"
;
if( result == false ) {
endmacro;
}
disablehistory 0x03;//ファイルヒストリを残さない
#objFso = createobject("Scripting.FileSystemObject");
#objFolder = member( #objFso, "GetFolder", $targetFolder );
#objFiles = member( #objFolder, "Files" );
#cExecuted=0;
while( 1 ) {
#objFile = getcollection( #objFiles );
if( #objFile == 0 ) break;
$filename = member( #objFile, "Name" );
$ext= member( #objFso, "GetExtensionName", $filename );
$extLow = tolower( $ext );
if( $extLow == $targetExt ) {
loadfile $filename;
execmacro $targetMacro;
#cExecuted = #cExecuted + 1;
}
}
closenew;
message str(#cExecuted)+"個のファイルにマクロを実行しました。";
endmacro;
●IEのオブジェクトを使ってJSON
//JSON
#html = createobject("htmlfile");
member #html, "write", R"(<meta http-equiv="x-ua-compatible" content="IE=11" />)";
#JSON = member( member( #html, "parentWindow" ), "JSON" );
//obj = JSON.parse(...);
#obj = member( #JSON,"parse", R"(
{"foo":"bar","abc":123}
)" );
//obj.foo
message member(#obj,"foo");
//obj.abc
#n=member(#obj,"abc");
message str(#n);
//JSON.stringify(obj)
allowobjparam 0,1;
$str = member( #JSON, "stringify", #obj );
message $str;
endmacro;
JavaScriptを使った方が簡単です。