English help on website



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を使った方が簡単です。