[[FrontPage]]

従来、[[あふ]]本体にはスクリプト機能が存在しておらず、複雑な操作を実行したい場合には[[AutoHotkey]]と連携させる、などが必要でした。しかし、遂にあふ自体にスクリプト機能(&SCRIPTコマンド、オートメーションサーバ)が実装されました。本項の目的は有志によるスクリプトの情報集積です。

* 使用方法 [#ra312718]

詳細はあふw同梱の AFXWAMS.txt を参照のこと。

** 内部命令 &SCRIPT (x86版(32ビット)限定) [#l700cb64]

「あふ」のキー設定等に &SCRIPT script.vbs などとして登録する。デフォルトでは VBScript だが、先頭行に LANG:JScript のように書けば言語を指定可能。

** オートメーションサーバ [#g9000d81]

事前に登録が必要。「あふwの設定」の「about」タブにある「登録」ボタンを押すことで登録が可能。外部のスクリプトから

  // test.js
  var obj = WScript.CreateObject("afxw.obj");
  obj.MesPrint('Test message');

のような形で「あふ」を操作可能。ただし、(恐らく)どの「あふ」で実行するかを指定できないため一つしか「あふ」を立ち上げない、という場合以外では利用は難しい。

* 一番単純な導入例 【初心者向け】 [#g0be0d20]
下のサンプルをみても、何がなんだかわからない/scriptで何ができるんだ?という完全初心者向け導入方法

**2段階改名を一括処理(但し1ファイルのみ) [#p298ff6b]

【例】「hogehoge 25.zip」 → 「【コミック】 hogehoge 25巻.zip」 に改名したい

 1.冒頭に「 【コミック】 」を付与
 2.「巻」を

二つの改名を一気にできるのがスクリプトっぽいけど…((正規表現でのやりくりは除外))

 #LANG:VBScript
 
 '『ファイル名置換スクリプト』
 '【注】1ファイルのみ対応、正規表現DLL導入済であること 
 
 afxw.Exec ("&regren -MX s/(.+)/【コミック】 \1/gk")      '第一の処理【コミック】を付与
 afxw.Exec ("&regren -MX s/\.zip/巻.zip/gk")              '第二の処理「巻」の付与

***◆導入・実行例 [#ca444bf9]

これを「rename_comic.vbs」として任意のフォルダに保存
menuファイル内に 例えば
 "R:改名"  &SCRIPT "D:\〜\AfxW32\〜\rename_comic.vbs"
と登録し、メニューから 「R:改名」を実行

***◆最低限のみの解説 [#hbc17981]

|1行目|#LANG:VBScript| 省略可 上記 参照|
|2/3行目| 「'」((JavaScriptは「//」)) 注釈行| 処理には影響を及ぼさないので、メモ、注釈等に使用、なくても可、どの行においても当然可|
|2/3行目| 「'」 注釈行| 処理には影響を及ぼさない。メモ、注釈等に使用、なくても可、どの行においても可|
|4行目〜|実行部分|''【基本書式】afxw.exec("〜")''|
||| 例)afxw.Exec ("&MELTTO $P")  自窓に解凍|
|||   afxw.Exec ("&MASK *.zip *.rar *.lzh *.7z")  マスク指定|
|||   afxw.Exce ("D:\〜\○○○.exe $MF") 指定アプリ実行 etc|


この''afxw.exce(" 〜")の〜部分にmenuで記述していたコマンドを転記する''。以上。

''うまくいけば''順列に処理されます。''最低限''のスクリプトはこれで書けます。

ただし、このスクリプト(とすら呼べるのか)でいえば、せっかくの2段階処理なのに、1ファイルでしか処理できません。~
複数行マークしても、最初の改名「【コミック】」は全ファイルに適用されますが、その置換後にマークが解除されて、「巻」はカーソル行にある別ファイルに付与されます。((下の解凍後再選択スクリプトでは不可。ファイル名が改名されているのでキープされたファイル連名もリセットしないといけない))~
そのような部分の処理こそ、条件指定・エラー対応・反復etcの複合が可能な『スクリプト』の本番です。
そのような部分の処理こそ、条件指定・反復etcの複合が可能な『スクリプト』の本番です。

* スクリプト集 [#b7c1f631]

** ショートカット(.lnk) の挙動を変更する [#vf15c7f7]

  LANG:JScript
  
  //
  // shortcut.afx.js: shortcut handler for afxw
  //
  // Change the current folder path
  //   &SCRIPT shortcut.afx.js -P "$P\$F"
  // Change the opposite folder path
  //   &SCRIPT shortcut.afx.js -O "$P\$F"
  //
  
  var wsh = WScript.CreateObject("WScript.Shell");
  var shortcut = wsh.CreateShortcut(WScript.Arguments.Item(1));
  
  var fs = WScript.CreateObject("Scripting.FileSystemObject")
  var target = shortcut.TargetPath;
  if(fs.FolderExists(target)) {
  	target = target + '\\';
  }
  
  Afxw.MesPrint('&EXCD ' + WScript.Arguments.Item(0) + '"' + target + '"');
  Afxw.Exec('&EXCD ' + WScript.Arguments.Item(0) + '"' + target + '"');

各種設定(1)の「ショートカットはリンク先を参照する」のチェックを外した上で、拡張子判別実行で lnk の ENTER に対して &SCRIPT shortcut.afx.js -P "$P\$F" SHIFT+ENTER に対して &SCRIPT shortcut.afx.js -O "$P\$F" のように設定すると、.lnk のリンク先がフォルダの場合、ENTER で自窓でそのフォルダを、SHIFT+ENTER で反対の窓でそのフォルダを開く。リンク先がファイルの場合は、そのファイルがあるフォルダを開きカーソルがそのファイル上に設定される。

** あふwで指定した単位でファイルを選択する(奇数番目を選択等) (2ch-37-251) [#nd5f7615]

https://gist.github.com/2067897

&SCRIPT afxselect.vbs 2 1 や wscript.exe afxselect.vbs 2 1 とすると奇数を選択(2つ組のうち1つ目を選択)

** ファイル名として使用できない文字をいわゆる全角に変換して新規作成 (2ch-37-444) [#o284e010]

  LANG:jscript
  var i = Afxw.Extract('$I3"新規テキストの編集"');
  i = i.replace(/\\/g, "¥").replace(/\//g, "/").replace(/:/g, ":").replace(/\*/g, "*").replace(/"/g, "”").replace(/</g, "<").replace(/>/g, ">").replace(/\|/g, "|");
  Afxw.Exec("&EDIT " + i);

** 実行結果をメッセージ窓に表示 (2ch-35-510) [#x2d56f5f]

  Dim ao, WSH, wExec, sCmd, Result, aryResult
  Set WSH = CreateObject("WScript.Shell")
  Set ao = Createobject("afxw.obj")
  
  If WScript.Arguments.Count >= 1 Then
  sCmd = WScript.Arguments(0)
  For j = 1 To WScript.Arguments.Count -1
  sCmd = sCmd & " " & WScript.Arguments(j)
  Next
  'Set wExec = WSH.Exec(sCmd)
  Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) ''(3)
  Do While wExec.Status = 0
  Loop
  Result = wExec.StdOut.ReadAll
  aryResult = Split(Result, vbCrLf)
  For cnt = 0 To UBound(aryResult)
  ao.MesPrint aryResult(cnt)
  next
  ao.MesOk
  End If
  Set wExec = Nothing
  Set WSH = Nothing
  Set ao = Nothing

WSCRIPT.exe "$~\script\cmdline.vbs" $IT"$K $P\$F" $I"コマンドライン" のような形で使用する

** axpathlist.spi を使用してファイル名検索結果を仮想フォルダで開く (2ch-35-533) [#fdac9ca0]

  LANG: VBScript
  Option Explicit
  Dim wsh,input,cmdline,findexe,flag
  findexe = "C:\cygwin\bin\find.exe"
  Set wsh=Wscript.CreateObject("Wscript.Shell")
  input = InputBox("カレント以降で検索したいファイル名を入力してください。(正規表現可)","find","*")
  If input<>"" Then
  cmdline = Afxw.Extract(findexe + " $P -iname '" + input + "' -fprintf find.sz7 '%p\r\n'")
  flag = wsh.Run(cmdline,,True)
  afxw.Exec("&EXCD -Pfind.sz7")
  afxw.Exec("&S_ARC axpathlist.spi")
  Else
  afxw.MesPrint("検索文字列がありません。")
  End If
  afxw.MesOk()

** スクリプト用メニューを作成する (2ch-35-548) [#c3987854]

$~\script\ を検索して $~\script.mnu に書き出す

  Set fso = WScript.CreateObject("Scripting.FileSystemObject")
  scriptDIR = Afxw.Extract("$~\script\")
  scriptMENU = Afxw.Extract("$~\script.mnu")
  
  Set newMenu = fso.OpenTextFile(scriptMENU, 2, true, 0)
  newMenu.WriteLine("afx Scripts")
  
  Set dir = fso.GetFolder(scriptDIR)
  For Each file In dir.Files
  menuLine = """" + file.Name + """ &SCRIPT """ + scriptDIR + file.Name + """"
  newMenu.WriteLine(menuLine)
  Next
  
  Set fso = Nothing
  Set newMenu = Nothing
  Set dir = Nothing
  
  Afxw.Exec("&RELOAD LR")
  Afxw.Exec("&MENU " + scriptMENU)

** マスクを反転する (2ch-35-551) [#f932690b]

  'マスクの反転
  Mask = Afxw.Extract("$*P")
  aryMask = Split(Mask, " ")
  
  For i = 0 To UBound(aryMask)
  Select Case Left(aryMask(i), 1)
  Case ":" aryMask(i) = Mid(aryMask(i), 2)
  Case ""
  Case Else aryMask(i) = ":" & aryMask(i)
  End Select
  Next
  
  InvMask = Join(aryMask)
  Afxw.Exec("&MASK " & InvMask)

** マーク+Uキーでの書庫展開後にマークを復帰 (2ch-35-555) [#kf0ac506]

  //LANG:JScript
  // Uキー(&EXTRACT)で書庫の展開をするとマークが解除されてしまうので解除されないようにする
  // 複数のアーカイブファイルを展開した直後に削除する時に便利
  
  // カレント窓にマークが1個でもあれば真
  function ismark(){
  a.exec("&tow");
  var m = a.extract("$mO");
  a.exec("&tow");
  return "" != m;
  }
  var a = Afxw;
  var mark = a.extract("$MS");
  var mflag = ismark();
  a.exec("&extract");
  if(mflag) a.exec("&mark " + mark);

** 画像ビューワ表示中に一番下のファイルに移動 (2ch-35-665) [#r92c90ae]

  #LANG:VBScript
  Afxw.Exec("&SENDKEY 0013")
  Afxw.MesPrint(Afxw.Extract("$F"))
  Afxw.Exec("&SENDKEY 2034")
  Afxw.MesPrint(Afxw.Extract("$F"))
  Afxw.Exec("&SUSIE")

> 一旦画像ビュアから抜け、て「CTRL+Page_Down」でカーソルを最下部にし、再度画像ビュアに戻っているだけです。~
当然、最下部に画像ファイル以外のものがあったらシクるはずw~
途中のAfxw.MesPrintは、外すと動作モードの遷移が発生しなかったので残してます。

なお、トップに移動は afx.key に以下で OK とのこと。

  [GVIEW]
  K0000="2037&EXCD -P"$P\"

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS