Tablacus Explorer 2017-05-15 (Mon) 22:58

なんとなく Tablacus Explorerを使ってみた。

長らく愛用している X-Finderが非常に安定していて特に不満もないので、今まで他のファイラを試す必然性がなかったのだ。

「64ビットネイティブのアプリが増えてきた中 X-Finderは 32ビットだなぁ。

そういえば同じ作者さんの Tablacus Explorerは 64ビット版もあったっけ。」

くらいの感じで試してみたのだ。

Gakuさん作だけあって拡張性が半端なく高い。ベースはシンプルだけど豊富なアドオンが提供されていて好きなようにカスタムできる。

アドオンはバイナリかと思ってたけど JScriptで書けるし、イベントをフックしてイジり倒したりなんてこともできそう。

とにかく見たところ X-Finderの比じゃなくイジれる範囲が広い。

これはやばい。久々にハマってしまいそうな予感である。(´・ω・`)y-~~~

デバッグコンソール verUP 2017-03-31 (Fri) 00:21

デバッグコンソール - X-Finderガジェット を少々更新。

・オブジェクトを展開する関数(dir)を追加。
WScript.Include('デバッグコンソール.js');
var msg = new debugConsole();
var a = { func1: function(a){ return a * 2; },
aa: 3, bb: 5, cc:{ str1 : 'abc', str2 :'def', test: {aa: 2, bb:3}}, dd: 3.14159};
msg.info(msg.val(a, 'a'));

↑こんな感じで使うと以下のようにオブジェクトを展開して表示する。
a -->
func1{...}
aa: 3
bb: 5
cc: [object]
str1: "abc"
str2: "def"
test: [object]
aa: 2
bb: 3
dd: 3.14159

2017/04/02 追記

オブジェクトを展開する関数名変更 val → dir
循環参照の処理追加


・左側のガジェット(Gadget(1))でも機能するように修正。両方開いていたら右側(Gadget(0))を優先。

IE版が IE11で動かなくなっていたので IE11(以降)用に修正。(旧版はサポート外とする)

X-Finderスクリプト用 Include

処理に時間の掛かるバッチ処理を別プロセスで実行する 2017-03-01 (Wed) 22:08

X-Finderでファイルを複数選択して、おのおのにコマンドを実行するようなスクリプト処理を行うと、こんなメッセージが出ることがある。

The script you are executing is taking longer than expected to run.
Click End to abort the script, or Continue to continue script execution.
[End] or [Continue]


スクリプトの実行時間が既定のタイムアウト値を超えたのが原因なのだろうが、時間が掛かるのを承知で処理している場合には、

これが何度も出てやっかいだったりする。タイムアウト値を任意に変更、或いは無効にしたりする方法がわからないので、

wscript.exe (以降 WSH)に処理を投げて別プロセスで実行させる。(WSHではパラメタで指定しない限り無制限で実行されるようだ。)

WSHに投げるスクリプト中では、X-Finder独自のオブジェクトは使えないため、一部の環境変数を引き継げるようにしておく。

で、その機能を一まとめにしてインクルードして使えるようにする。

【続きを読む】

選択されたテキストファイルにダイアログで指定した秀丸マクロを適用する 2017-02-18 (Sat) 22:26

選択したファイルに秀丸エディタのマクロを適用する とほぼ同内容。
変更点は、適用するマクロをダイアログで指定することと、マクロ適用対象ファイルへのガードの強化。
※別途 sfc-miniのインストールが必要。

// 選択されたテキストファイルに秀丸マクロを適用する(マクロはダイアログで選択する)
if(typeof SFCMINI_DEF === "undefined") WScript.Include('sfcmini.js');
if(typeof FUNCS_DEF === "undefined") WScript.Include('funcs.js');

var fs = funcs.fs;
var shell = funcs.shell;
var cSel = WScript.Col(WScript.Env('CurrentSelected'));

var hidemaruPath = 'C:/Util/Hidemaru/';
var macroPath = fs.BuildPath(hidemaruPath, 'Macro/X-Finder');
var hidemaru = fs.BuildPath(hidemaruPath, 'Hidemaru.exe');
var macro = '行末の空文字削除.mac';


// チェック
if(!fs.FolderExists(WScript.Env('Current')) || cSel.Count < 1) WScript.Quit();

// 退避先フォルダ作成
try{
var svfolder = fs.BuildPath(WScript.Env('Temp'), 'XF_Sav_' + fs.GetTempName());
fs.CreateFolder(svfolder);
}
catch(e){
WScript.Echo('退避先フォルダ作成失敗');
WScript.Quit();
}


// 秀丸マクロ選択
var mac = sfcmini.fileSelect(macroPath, '秀丸マクロ(*.mac)\t*.mac\t\t', macro, false);

if(mac && fs.FileExists(mac)){
for(var i = 0, para = ' /h /n /i /x"' + mac + '" '; i < cSel.Count; i++){
if(!fs.FileExists(cSel.Item(i))) continue;
if(/BINARY/i.test(funcs.exec('nkf -g ' + cSel.Item(i)).stdout)) continue;
shell.Run('cmd /c copy "' + cSel.Item(i) + '" "' + svfolder + '"', 0, true);
var exe = shell.Exec(hidemaru + para + cSel.Item(i));
while(!exe.Status) WScript.Exec('Sleep:100');
}
}

ソースコード赤色の部分は秀丸エディタのパス、秀丸マクロフォルダのパス、既定のマクロ名の指定部分。
環境に応じて要変更。

ソースコード青色の部分は、最悪手動で元に戻せるように対象ファイルを一時フォルダに退避する。

ソースコード緑色の部分は nkfを使用して、選択されたファイルがバイナリファイルなら処理しないようにしている。
上記の例ではnkfの実行ファイルをパスの通ったフォルダに入れているが、そうでない場合は環境に応じて要変更。
※ファイルによっては正確に判定出来ない事もありうるので要注意。


ファイルの退避とテキストファイルチェックはファイルIOを伴うため、重くなる場合もあるのでガードが不要なら削除可。
ただし、間違ってマクロを適用してしまうと元に戻せないので使用に際しては十分注意すること。

Includeファイルは、ここから。

コモンダイアログでファイル選択する 2017-01-20 (Fri) 00:07

sfc-mini経由でcomdlg32.dllのGetOpenFileNameを呼び出してファイルを選択する関数を作成。

初期フォルダ指定、フィルタ、複数選択に対応する。

Jscriptで文字列にnullが入っていると上手くないので、lpstrFile、lpstrFilterのデリミタはそれぞれ '\n'、'\t'に変更。

function fileSelect(initdir, filter, multi){
var MAX_PATH = 512;
var OFN_HIDEREADONLY = 0x00000004;
var OFN_ALLOWMULTISELECT = 0x00000200;
var OFN_EXPLORER = 0x00080000;
var defaultFilter = '全てのファイル\t*.*\t\t';

var api = new ActiveXObject('SfcMini.DynaCall');
var GetOpenFileName = new ActiveXObject('SfcMini.DynaCall');
var OpenFile = new ActiveXObject('SfcMini.Structure');
var lpstrFileBuf = new ActiveXObject('SfcMini.Structure');
var lpstrFilterBuf = new ActiveXObject('SfcMini.Structure');

lpstrFileBuf('str', 'String*' + MAX_PATH);
lpstrFilterBuf('str', 'String*' + MAX_PATH);
api.LoadLibraries('comdlg32', 'msvcrt');

function replaceChar(ptr, from, to){
for(var a = api.memchr(ptr, from.charCodeAt(0), MAX_PATH); a;){
api.memcpy(a, to, 1);
a = api.memchr(ptr, from.charCodeAt(0), MAX_PATH);
}
}
OpenFile(
'lStructSize', 'Long',
'hwndOwner', 'Long',
'hInstance', 'Long',
'lpstrFilter', 'Long',
'lpstrCustomFilter','String',
'nMaxCustFilter', 'Long',
'nFilterIndex', 'Long',
'lpstrFile', 'Long',
'nMaxFile', 'Long',
'lpstrFileTitle', 'String',
'nMaxFileTitle', 'Long',
'lpstrInitialDir', 'String',
'lpstrTitle', 'String',
'flags', 'Long',
'nFileOffset', 'Integer',
'nFileExtension', 'Integer',
'lpstrDefExt', 'String',
'lCustData', 'Long',
'lpfnHook', 'Long',
'lpTemplateName', 'String'
);

lpstrFilterBuf.str = filter ? filter : defaultFilter;
replaceChar(lpstrFilterBuf, '\t', '\0');

OpenFile.lStructSize = 76;
OpenFile.lpstrFilter = lpstrFilterBuf;
OpenFile.nFilterIndex = 1;
OpenFile.nMaxFile = MAX_PATH;
OpenFile.lpstrTitle = 'ファイルを開く' + (multi ? ' (複数選択可)' : '');
OpenFile.flags = OFN_HIDEREADONLY | (multi ? OFN_ALLOWMULTISELECT | OFN_EXPLORER : 0);
OpenFile.lpstrInitialDir = initdir.replace(/\//g, '\\');
OpenFile.lpstrFile = lpstrFileBuf;

if(api.GetOpenFileName(OpenFile)){
replaceChar(lpstrFileBuf, '\0', '\n');
return lpstrFileBuf.str.replace(/\n{2,}/,'');
}
else{
return null;
}
}

var filter = 'テキストファイル\t*.txt;*.dat\t実行ファイル\t*.exe\t\t';
WScript.Echo(fileSelect('c:/work/data', filter, true));
注意事項
基本的にこのブログはブログ主の備忘録です。

ブログの内容にはブログ主の主観や時には正確でない情報が含まれていることもあります。書いてある内容がすべての環境にあてはまることを保証するものでもありません。
また過去の記事の情報はそれが参照された時点では既に陳腐化していることもあります。

その辺をご理解の上で当ブログ内に書いてあることを試す場合は自己責任でお願いします。

万一何らかの損害が生じても責任は持てませんのであしからず!

記事内容の誤りの指摘、疑問点の回答などコメント頂けると助かります。
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
ブログ内検索
カラーコードチェッカ
カラーコードの確認
入力例) #ffffff | blue
カテゴリ
最新記事
最新コメント
最新トラックバック
リンク
ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文: