プログラム学習室 http://studyhallweb.com/

秀丸マクロに関するメモ

全テキストをスキャン

gofiletop;

while(code != eof) {
  left;
  if(code == 0x0D)
    down;
    golinetop;
  }
}

endmacro;

選択中の文字列の取得


$selection = gettext(seltopx,seltopy,selendx,selendy);

endmacro;

文字列の比較

// 文字列の比較関数が無いため
// その文字列が含まれかつ長さが等しいか確認する
#chack0 = strstr($strA, $strB);
#chack1 = strlen($strA) - strlen($strB);
if(#chack0 == 0 & #chack1 == 0) {
  // 同じ
}
else {
  // 異なる
}
endmacro;

文字中の'\\'を'\'に変換

//  $PathA中の'\\'を'\'に変換した結果が$PathBに代入される
#i = 0;
#mode = 1;
$PathB = "";
while (#i < strlen($PathA)) {
  if(midstr($PathA, #i, 1) == "\\") {
    #mode = #mode * (-1);
  }
  if(#mode > 0)
    $PathB = $PathB + midstr($PathA, #i, 1);
  #i = #i + 1;
}

演算子について

// += は使えない
$Test = "a";
$Test += "b";   // ここでエラーになる
message($Test);

メニュー

$menu[0]="マクロA実行";
$menu[1]="マクロB実行";
menuarray $menu, 2;     //  第2引数は $menu 配列の数

#ans = result;
if (#ans == 0)
  // キャンセルされたとき
  endmacro;
else if ( #ans == 1 ){
  // マクロA実行が選択されたとき
  execmacro "macroA.mac";
  endmacro;
}
else if( #ans == 2) {
  // マクロB実行が選択されたとき
  execmacro "macroB.mac";
  endmacro;
}

一行選択

// これはダメ
// 0,0,0,1 になってしまう
gofiletop;
selectline;
message(str(seltopx) + "," + str(seltopy) + "," + str(selendx) + "," +
str(selendy));

// これならばOK
gofiletop;
beginsel;
golineend;
message(str(seltopx) + "," + str(seltopy) + "," + str(selendx) + "," + str(selendy));

秀丸マクロのPath取得

openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
$MacroPath = getregstr( "MacroPath" );
closereg;