Windows スクリプト コンポーネント で作成した、秀丸エディタマクロ用COMコンポーネントです。
COMコンポーネントといっても、XML と、VBScript、JScriptで構成されています(要はテキストファイル)。
圧縮ファイル内には、以下のファイルが格納されています。
内部で .NET Framework の機能を使用しているので、.NET Framework のランタイムライブラリが必要です。 (開発環境は、 .NET Framework 4 になります。)
このCOMコンポーネントを使う方法は2つあります。
この方法では、createobject関数を使うことで使用できます。
#lib = createobject("HidemaruMacro.WscLib");
レジストリに登録するには、管理者権限が必要になります。登録を行った時のパスをレジストリに登録するので、あらかじめファイルを配置してから、登録を行ってください。
配布ファイルに含まれる、「HidemaruMacro.WscLib_setup.vbs」を使うと、管理者権限で起動し、レジストリへの登録/登録解除が、簡単にできます。 HidemaruMacro.WscLib_setup.vbs と HidemaruMacro.WscLib.wsc が同じ場所にあることを確認し、 HidemaruMacro.WscLib_setup.vbs を実行してください。登録 or 登録解除 のどちらを行うか問い合わせが表示するので、選択してください。
レジストリ登録を行った後に、HidemaruMacro.WscLib.wsc を移動させないでください。ファイルを置く場所を変えたい場合は、いったん登録を解除し、ファイルを移動してから再度登録してください。
手動で行う場合には、管理者権限でコマンドプロンプトを起動し、以下のコマンドを入力してください。
登録
regsrv32 HidemaruMacroWscLib.wsc
登録解除
regsrv32 /u HidemaruMacroWscLib.wsc
この方法では、getobject関数を使うことで使用できます。createobject関数からは使用できません。
#lib = getobject(@"script:C:\Users\<username>\AppData\Roaming\Hidemaruo\Hidemaru\Macro\HidemaruMacroWscLib.wsc");
注意) "C:\Users\~" 部分は "HidemaruMacroWscLib.wsc"のフルパスを指定してください。
レジストへの登録は不要ですが、“script:”以降にフルパスで指定する必要があります。
レジストリに登録した場合は、旧バージョンの登録解除が必用です。
旧バージョンの「登録解除」を行わない場合、レジストリに古い情報が残されます。 (古い情報が残っていても、特に問題はありません。)
文字列操作用と、日付関連のオブジェクトがあり、各種メソッド、プロパティが実装されています。
メインオブジェクト
VersionStr
バージョン情報を文字列で返します。
Version
バージョン情報を数値で返します。
CreateString
HidemaruMacro.WscLib.String オブジェクト作成
CreateDate
HidemaruMacro.WscLib.Date オブジェクト作成
CreateWMI
HidemaruMacro.WscLib.WMI オブジェクト作成
CreateInputBox
HidemaruMacro.WscLib.InputBox オブジェクト作成
CreateMsgBox
HidemaruMacro.WscLib.MsgBox オブジェクト作成
GetArrayListDataType
ArrayLisyに格納されている内容を返す。
HidemaruMacro.WscLib.String
文字列関連オブジェクト
ResetDelimiter
TrimString系関数で削除する文字を初期化する。
Split
文字列の分解
URIDecode
URIエンコードされた文字のデコード
URIDecode2
URIエンコードされた文字のデコード
URIEncode
指定された文字を、エンコードする
URIEncode2
指定された文字を、エンコードする
TrimString
両端にある、指定された文字列の削除
LTrimString
先頭にある、指定された文字列の削除
RTrimString
末尾にある、指定された文字列の削除
Sprintf
引数を、書式文字列に従って変換した文字列を返す。
HidemaruMacro.WscLib.Date
日時関連オブジェクト
ResetLocale
ロケールをデフォルトに戻す
Date_Add
指定された日時から、任意間隔の日時を返す
WeekdayLongName
長い曜日の名前を返す
WeekdayShortName
短い曜日の名前を返す
MonthLongName
長い月の名前を返す
MonthShortName
短い月の名前を返す
StrfTime
フォーマットに従い、日時を返す
HidemaruMacro.WscLib.WMI
WMI関連オブジェクト
ResultList
各メソッドの戻り値を取得する。
ResultListMax
各種メソッドの戻り値の数を取得する。 (現在保有している戻り値の数)
MonitorCount
接続されているモニタの数を返す。(monitorcount キーワードと同じ)
GetProcessList
実行中のプロセス一覧を取得
GetProcessListWithCaption
指定されたキャプションをもつ、実行中のプロセス一覧を取得
ProcessTerminate
指定されたプロセスを終了させる。
RegEnumKey
レジストリのサブキーを列挙する。
RegEnumKeyValue
指定されたキーから、値の名前と、データの種類を列挙する。
GetMonitorWidth
指定されたモニタの幅を返す。
GetMonitorHeight
指定されたモニタの高さを返す。
HidemaruMacro.WscLib.InputBox
InputBox関連オブジェクト
HidemaruMacro.WscLib.MsgBox
MsgBox関連オブジェクト
取得のみ
レジストリ登録あり
#lib = createobject("HidemaruMacro.WscLib");
レジストリ登録なし
#lib = getobject(@"script:C:\Users\~\HidemaruMacroWscLib.wsc");
取得のみ
$ver = getpropstr(#lib, "VersionStr");
出力例
HidemaruMacro.WscLib Version1.01 Copyright (C) 2013 h-tom
取得のみ
#ver = getpropnum(#lib, "Version");
出力例
101
#string = callmethod_returnobj(#lib, "CreateString");
#date = callmethod_returnobj(#lib, "CreateDate");
#WMI = callmethod_returnobj(#lib, "CreateWMI");
#Inputbox = callmethod_returnobj(#lib, "CreateInputBox");
#msgbox = callmethod_returnobj(#lib, "CreateMsgBox");
$type = callmethod_returnstr(#lib, "GetArrayListDataType", #arraylist, #n);
(オブジェクト)#arraylist
対象のArrayList オブジェクト
(数値)#n
チェックしたいデータが入っているインデックス
(文字)変数の種類を示す文字列。エラーの場合は、""を返します。秀丸マクロから、文字列と数値を入れた場合は、以下の値を返します。
文字列 String
数値 Long
引数に、ArrayListオブジェクト を指定するので、allowobjparam文で、オブジェクトと認識するように設定してください。
allowobjparam 0,1,0;
$type = callmethod_returnstr(#lib, "GetArrayListDataType", #array, #n);
メインオブジェクトを作成
レジストリ登録あり
#lib = createobject("HidemaruMacro.WscLib");
レジストリ登録なし
#lib = getobject(@"script:C:\Users\~\HidemaruMacroWscLib.wsc");
メインオブジェクトから、HidemaruMacro.WscLib.String を取得する
#String = callmethod_returnobj(#lib, "CreateString");
setpropstr #String, "TrimDelimiter", "[ \\t]";
$trim = getpropstr(#String, "TrimDelimiter");
callmethod #String, "ResetDelimiter";
#ret = callmethod_returnobj(#String, "Split", $Target, $delimiter);
(文字)$target
対象文字列
(文字)$dedelimiter
分割する文字列。正規表現も指定可能です。正規表現を使う場合には"/"で囲むこと。
例)
$Target = "Test1 test2\ttest3\ttest4";
$delimiter = "/\\s+/";
#ret = callmethod_returnobj(#String, "Split", $Target, $delimiter);
(オブジェクト)ArrayListオブジェクト を返します。
ArrayListオブジェクトの、“Count”、“Item”を使用する方法
#max = getpropnum(#ret, "Count");
#n = 0;
while(#n < #max){
$ret[#n] = getpropstr(#ret, "Item", #n);
#n = #n + 1;
}
releaseobject #ret;
getcollectionを使用し、HRESULT(getresultex(11))で終了を判断する方法
while(true){
$item = getcollection(#ret, 0);
if(getresultex(11) != 0) break;
$ret[#n] = $item;
#n = #n + 1;
}
releaseobject #ret;
$ret = callmethod_returnstr(#String, "URIDecode", $Target);
(文字)$Target
対象文字列
例)
$Target = "%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%3F%2F";
$ret = callmethod_returnstr(#String, "URIDecode", $Target);
message $ret;
$ret = callmethod_returnstr(#String, "URIDecode2", $Target);
(文字)$Target
対象文字列
例)
$Target = "%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%3F%2F";
$ret = callmethod_returnstr(#String, "URIDecode2", $Target);
message $ret;
$ret = callmethod_returnstr(#String, "URIEncode", $Target);
(文字)$Target
対象文字列
例)
$Target = "秀丸エディタ?";
$ret = callmethod_returnstr(#String, "URIEncode", $Target);
message $ret;
$ret = callmethod_returnstr(#String, "URIEncode2", $Target);
(文字)$Target
対象文字列
例) $Target = “秀丸エディタ?”; $ret = callmethod_returnstr(#String, “URIEncode2”, $Target); message $ret;
文字列から、指定された文字を、先頭、末尾、先頭と末尾、から削除します。削除する文字は、TrimDelimiterプロパティで設定します。
$ret = callmethod_returnstr(#String, "TrimString", $Target);
$ret = callmethod_returnstr(#String, "LTrimString", $Target);
$ret = callmethod_returnstr(#String, "RTrimString", $Target);
(文字)$Target
対象文字列
$str = callmethod_returnstr(#String, "Sprintf", $formatstring, #arraylist);
$str = callmethod_returnstr(#String, "Sprintf", $formatstring, #num);
$str = callmethod_returnstr(#String, "Sprintf", $formatstring, $str);
(文字)$formatstring
フォーマット文字列
%[flags] [width] [.precision]type
type
d,x,X,s しか指定できません。
flags(-,+,0, ,#)
- :指定されたフィールド幅に結果を左詰めで出力します。
+ :出力値が符号付きの場合は、出力値の前に符号 (+ または -) を付けます。
0 :width の前に 0 を付けると、最小幅になるまで 0 が追加されます。
0 と - が出力される場合、0 は無視されます。
整数書式 (x、X、d) と一緒に 0 を指定し、精度も指定する場合 (%04.d など)、0 は無視されます。
' '空白文字:出力値が符号付き正数の場合は、出力値の前に空白を付けます。
空白フラグと + フラグの両方を指定すると、空白フラグは無視されます。
# :x、または X 書式と一緒に使用すると、0 以外のすべての出力値の前にそれぞれ 0、0x、または 0X が付きます。
width
出力する最小文字数を指定します。"*"には対応していません。
precision
s :表示する最大文字数、
d,x,X:整数値として表示する最小桁数を指定します。
$str 、#num または #arraylist
変換対象
変数が一つの場合は、文字、数字のどちらかを指定すること。
複数の引数を指定する場合は、Arraylistオブジェクトに入れて指定すること。
例)
変換する引数が、文字列の場合
$str = callmethod_returnstr(#String, "-->%10s<--", "秀丸エディタ");
変換する引数が、数字の場合
$str = callmethod_returnstr(#String, "-->%10d<--", 12345);
変換する引数が、複数の場合
#array = createobject("System.Collections.ArrayList");
callmethod #array, "Add", "a";
callmethod #array, "Add", "c";
callmethod #array, "Add", "b";
callmethod #array, "Add", 100;
allowobjparam 0,0,1; //2番目の引数(#array)をオブジェクトとして渡す指示
$str = callmethod_returnstr(#String, "Sprintf", "-->%5s:%10s:%s:%-10d<--", #array);
メインオブジェクトを作成
レジストリ登録あり
#lib = createobject("HidemaruMacro.WscLib");
レジストリ登録なし
#lib = getobject(@"script:C:\Users\~\HidemaruMacroWscLib.wsc");
メインオブジェクトから、HidemaruMacro.WscLib.Date を取得する
#Date = callmethod_returnobj(#lib, "CreateDate");
Dateオブジェクトで使用するロケールを指定します。指定する文字列/数値は、ロケール ID (LCID) の一覧を参照してください。
ここで設定した値は、HidemaruMacro.WscLib.Date 全体に影響します。
setpropstr #Date, "Locale", "en-us";
setpropnum #Date, "Locale", 1033;
#locale = getpropnum(#Date, "Locale");
#ret = callmethod_returnnum(#Date, "ResetLocale");
$ret = callmethod_returnstr(Date, "Date_Add", $intervalstr, #number, $datestr);
(文字)$intervalstr
加算する文字間隔を示す文字列。
yyyy 年
q 四半期
m 月
y 年間通算日
d 日
w 週日
ww 週
h 時
n 分
s 秒
(数値)#number
間隔
(文字)$datestr
日付を示す文字列
例)
$intervalstr = "m";
#number = 1;
$datestr = "2013/01/31";
$ret = callmethod_returnstr(Date, "Date_Add", $intervalstr, #number, $datestr);
message $ret; // --> 13/02/28(木) 00:00:00
$ret = callmethod_returnstr(Date, "WeekdayLongName", #number);
(数値)#number
曜日を示す数値(秀丸マクロの dayofweeknum キーワード)
例)
#number = dayofweeknum;
$ret = callmethod_returnstr(Date, "WeekdayLongName", #number);
message $ret; // --> 日曜日
setpropstr #Date, "Locale", "en-us";
$ret = callmethod_returnstr(Date, "WeekdayLongName", #number);
message $ret; // --> Sunday
$ret = callmethod_returnstr(Date, "WeekdayShortName", #number);
(数値)#number
曜日を示す数値(秀丸マクロの dayofweeknum キーワード)
例)
#number = dayofweeknum;
$ret = callmethod_returnstr(Date, "WeekdayShortName", #number);
message $ret; // --> 日
setpropstr #Date, "Locale", "en-us";
$ret = callmethod_returnstr(Date, "WeekdayShortName", #number);
message $ret; // --> Sun
$ret = callmethod_returnstr(Date, "MonthLongName", #number);
(数値)#number
月を示す数値(秀丸マクロの month キーワード)
例)
#number = val(month);
$ret = callmethod_returnstr(Date, "MonthLongName", #number);
message $ret; // --> 1月
setpropstr #Date, "Locale", "en-us";
$ret = callmethod_returnstr(Date, "MonthLongName", #number);
message $ret; // --> January
$ret = callmethod_returnstr(Date, "MonthShortName", #number);
(数値)#number
月を示す数値(秀丸マクロの month キーワード)
例)
#number = val(month);
$ret = callmethod_returnstr(Date, "MonthShortName", #number);
message $ret; // --> 睦月
setpropstr #Date, "Locale", "en-us";
$ret = callmethod_returnstr(Date, "MonthShortName", #number);
message $ret; // --> Jan
$ret = callmethod_returnstr(#Date, "StrfTime", $Format, $Datestr);
(文字)$Format
フォーマット文字列、以下のフォーマット文字列が指定可能です。
%a 短い曜日(Sun)
%A 長い曜日(Sunday)
%b 短い月 (Jan)
%B 長い月 (January)
%d 十進数2桁の日付
%H 24時間制の2桁の時間
%h 12時間制の2桁の時間(1~12時)
%i 12時間制の2桁の時間(0~11時)
%m 2桁の月
%M 2桁の時間
%p 指定した時刻に応じた'AM' あるいは 'PM'
%S 2桁の秒
%y 西暦の末尾2桁
%Y 西暦
%% "%"という文字
%ka jaロケールでの短い曜日
%kA jaロケールでの長い曜日
%kB 和風月名
%kp 指定した時刻に応じた'午前' あるいは '午後'
%ea en-usロケールの短い曜日
%eA en-usロケールの長い曜日
%eb en-usロケールの短い月
%eB en-usロケールの長い月
(文字)$Datestr
日時を示す文字列。"now" を指定すると、現在日時を指定します。
例)
setpropstr #Date, "Locale", "ja";
$ret1 = callmethod_returnstr(#Date, "StrfTime", "%Y/%m/%d(%a) %H:%M:%S", "2013/12/10 12:00:00");
setpropstr #Date, "Locale", "en-us";
$ret2 = callmethod_returnstr(#Date, "StrfTime", "%Y/%m/%d(%a) %H:%M:%S", "2013/12/10 12:00:00");
message $ret1 + "\n" + $ret2 ;
メインオブジェクトを作成
レジストリ登録あり
#lib = createobject("HidemaruMacro.WscLib");
レジストリ登録なし
#lib = getobject(@"script:C:\Users\~\HidemaruMacroWscLib.wsc");
メインオブジェクトから、HidemaruMacro.WscLib.WMI を取得する
#DWMI = callmethod_returnobj(#lib, "CreateWMI");
Readonly
$ret = getpropstr(#WMI, "ResultList", #n);
Readonly
#max = getpropnum(#WMI, "ResultListMax");
Readonly
#count = getpropnum(#WMI, "MonitorCount");
#ret = callmethod_returnnum(#WMI, "GetMonitorWidth", #index);
(数値)指定されたモニターの幅
失敗した場合や、モニター番号が不正な場合は、-1を返す。
#ret = callmethod_returnnum(#WMI, "GetMonitorHeight", #index);
(数値)指定されたモニターの高さ
失敗した場合や、モニター番号が不正な場合は、-1を返す。
#ret = callmethod_returnnum(#WMI, "GetProcessList");
(数値)取得したプロセス数
ResultListプロパティで、結果を取得してください。
ResultListプロパティで、取得できる内容
タブ区切りで、プロセスID、キャプション名、フルパスが格納されています。
2476 iexplore.exe C:\Program Files\Internet Explorer\iexplore.exe
戻り値の取得方法
#max = callmethod_returnnum(#WMI, "GetProcessList");
#n = 0;
while(#n < #max){
$ret[#n] = getpropstr(#WMI, "ResultList", #n);
#n = #n + 1;
}
#ret = callmethod_returnnum(#WMI, "GetProcessListWithCaption", "hidemaru.exe");
(数値)取得したプロセス数、エラーの場合は、-1 を返す。
ResultListプロパティで、結果を取得してください。
ResultListプロパティで、取得できる内容
タブ区切りで、プロセスID、キャプション名、フルパスが格納されています。
2476 iexplore.exe C:\Program Files\Internet Explorer\iexplore.exe
戻り値の取得方法
#max = callmethod_returnnum(#WMI, "GetProcessListWithCaption", "hidemaru.exe");
#n = 0;
while(#n < #max){
$ret[#n] = getpropstr(#WMI, "ResultList", #n);
#n = #n + 1;
}
#ret = callmethod_returnnum(#WMI, "ProcessTerminate", $Target);
(数値)正常に終了したプロセス数
ProcessTerminate メソッドの戻り値は、正常に終了したプロセス数になります。実際に終了しようとしたプロセス数は、ResultListMaxプロパティで取得できます。
ResultListプロパティで、取得できる内容
タブ区切りで、プロセスID、キャプション名、フルパス、終了コードが格納されています。
5140 cmd.exe C:\Windows\System32\cmd.exe 0x0
戻り値の取得方法
#ret = callmethod_returnnum(#WMI, "ProcessTerminate", "cmd.exe");
#max = getpropnum(#WMI, "ResultListMax");
#n = 0;
while(#n < #max){
$ret[#n] = getpropstr(#WMI, "ResultList", #n);
#n = #n + 1;
}
#ret = callmethod_returnnum(#WMI, "RegEnumKey", $RegRoot, $key);
(文字) $RegRoot 以下のどれかを指定すること。
"CLASSESROOT" :HKEY_CLASSES_ROOT
"CURRENTUSER" :HKEY_CURRENT_USER
"LOCALMACHINE":HKEY_LOCAL_MACHINE
"USERS" :HKEY_USERS
(文字) $Key レジストリキーの位置
(数値)サブキーの数、エラーの場合は、-1 を返す。
ResultListプロパティで、結果を取得してください。
戻り値の取得方法
#max = callmethod_returnnum(#WMI, "RegEnumKey", $RegRoot, $key);
#n = 0;
while(#n < #max){
$ret[#n] = getpropstr(#WMI, "ResultList", #n);
#n = #n + 1;
}
#ret = callmethod_returnnum(#WMI, "RegEnumKeyValue", $RegRoot, $key);
(文字) $RegRoot 以下のどれかを指定すること。
"CLASSESROOT" :HKEY_CLASSES_ROOT
"CURRENTUSER" :HKEY_CURRENT_USER
"LOCALMACHINE":HKEY_LOCAL_MACHINE
"USERS" :HKEY_USERS
(文字) $Key レジストリキーの位置
(数値)値の数、エラーの場合は、-1 を返す。
ResultListプロパティで、結果を取得してください。
内容は文字列で、指定されたレジストリキーの値名とデータの種類をタブ区切りで返します。
header 1
データの種類は、以下のとなります。
1 REG_SZ 文字列
2 REG_EXPAND_SZ 呼び出されたときに置き換えられる環境変数を含む文字列
3 REG_BINARY バイナリデータ
4 REG_DWORD 数値
5 REG_MULTI_SZ 複数行の文字列
戻り値の取得方法
#max = callmethod_returnnum(#WMI, "RegEnumKey", $RegRoot, $key);
#n = 0;
while(#n < #max){
$ret[#n] = getpropstr(#WMI, "ResultList", #n);
#n = #n + 1;
}
メインオブジェクトを作成
レジストリ登録あり
#lib = createobject("HidemaruMacro.WscLib");
レジストリ登録なし
#lib = getobject(@"script:C:\Users\~\HidemaruMacroWscLib.wsc");
メインオブジェクトから、HHidemaruMacro.WscLib.InputBox を取得する
#InputBox = callmethod_returnobj(#lib, "CreateInputBox");
$msg = getpropstr(#InputBox, "Result");
#ret = callmethod_returnnum(#InputBox, "Show", $msg, $title, $default, #x, #y);
(文字)$msg 表示するメッセージ
(文字)$title タイトル文字列
(文字)$default デフォルトで入力しておく内容
(数値)#x ダイアログを表示するx座標
(数値)#y ダイアログを表示するy座標
メインオブジェクトを作成
#lib = = createobject("HidemaruMacro.WscLib");
メインオブジェクトから、HHidemaruMacro.WscLib.MsgBox を取得する
#MsgBox = callmethod_returnobj(#lib, "CreateMsgBox");
#ret = callmethod_returnnum(#MsgBox, "Show", $msg, $title, #button, #icon, #default);
(文字)$msg 表示するメッセージ
(文字)$title タイトル文字列
(数値)#button 表示するボタン
(数値)#icon 表示するアイコン
(数値)#default デフォルトでアクティブするボタン
HidemaruMacro.WscLib.Stringの、split、Sprintf で使用している、ArrayList の詳細は、 ArrayList クラス (System.Collections) を参照してください。
簡単な説明
オブジェクトの生成
#array = createobject("System.Collections.ArrayList");
プロパティ
指定したインデックスの内容を取得。
文字列
$ret = getpropstr(#array, "Item", #n);
数値
#ret = getpropnum(#array, "Item", #n);
引数 #n は インデックス。
戻り値は、格納されている内容によって異なるが、秀丸マクロ側から、何が格納されているか判定はできない。
格納されている要素の数を取得。
#ret = getpropnum(#array, "Count");
メソッド
要素の追加。数値、文字列、オブジェクトを追加可能。
文字列の追加
callmethod #array, "Add", $str;
数値の追加
callmethod #array, "Add", #num;
全ての要素を削除
callmethod #array, "Clear";
内容の取り出し方(内容が全部文字列である事が前提)
Countと Item を使う
#max = getpropnum(#array, "Count");
#cnt = 0;
while(#cnt < #max){
message getpropstr(#array, "Item", #cnt);
#cnt = #cnt + 1;
}
getcollection を使う
while(true){
$item = getcollection(#array, 0);
if(getresultex(11) != 0) break;
message $item;
}