FrontPage

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

使用方法

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

内部命令 &SCRIPT (x86版(32ビット)限定)

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

オートメーションサーバ

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

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

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

一番単純な導入例 【初心者向け】

下のサンプルをみても、何がなんだかわからない/scriptで何ができるんだ?という完全初心者向け導入方法

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

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

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

二つの改名を一気にできるのがスクリプトっぽいけど…*1

#LANG:VBScript

'『ファイル名置換スクリプト』
'【注】1ファイルのみ対応、正規表現DLL導入済であること 

afxw.Exec ("&regren -MX s/(.+)/【コミック】 \1/gk")      '第一の処理【コミック】を付与
afxw.Exec ("&regren -MX s/\.zip/巻.zip/gk")              '第二の処理「巻」の付与

◆導入・実行例

これを「rename_comic.vbs」として任意のフォルダに保存 menuファイル内に 例えば

"R:改名"  &SCRIPT "D:\〜\AfxW32\〜\rename_comic.vbs"

と登録し、メニューから 「R:改名」を実行

◆最低限のみの解説

1行目#LANG:VBScript省略可 上記 参照
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ファイルでしか処理できません。
複数行マークしても、最初の改名「【コミック】」は全ファイルに適用されますが、その置換後にマークが解除されて、「巻」はカーソル行にある別ファイルに付与されます。*2
そのような部分の処理こそ、条件指定・反復etcの複合が可能な『スクリプト』の本番です。

スクリプト集

ショートカット(.lnk) の挙動を変更する

 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)

https://gist.github.com/2067897

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

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

 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)

 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)

 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)

$~\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)

 'マスクの反転
 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)

 //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)

 #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\"

*1 正規表現でのやりくりは除外
*2 下の解凍後再選択スクリプトでは不可。ファイル名が改名されているのでキープされたファイル連名もリセットしないといけない

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-09-22 (日) 18:23:24 (1884d)