2008年5月11日日曜日

あふからaxpathlist.spiを使用した検索結果の表示

某掲示板からヒントを得て、あふからaxpathlist.spiを使って、直接検索結果を表示できるようにしてみました。

以下が別途必要です。
作成したahkのスクリプトはafxscriptと同じディレクトリに入れてます。
findを使用したバージョン、カレントディレクトリ以下のファイルを検索

;検索結果をあふで表示
;検索文字はパラメータから受け取る
#Include %A_ScriptDir%
#Include afxscript.ahk
;作業ディレクトリの移動
SetWorkingDir, %A_ScriptDir%

;find.exeのパス
findexe := "D:\gnuwin32\bin\find.exe"

;afxのウィンドウハンドル取得
hwnd:=AfxFindWindow()

;afxのパス取得
afxPath:= AfxExecPath(hwnd)
;afxで開いている現在のパスを取得
findPath:=AfxPathCWin(hwnd)
;findを起動
RunWait, %comspec% /c %findexe% "%findPath%" -type f -iname "%1%" -print > %afxPath%\find.sz7
;サイズが0なら終了
FileGetSize, size, %afxPath%\find.sz7
if size = 0
{
Goto Exit
}
;&EXCDでフォルダの移動
afxArg= -P"%afxPath%\find.sz7"
AfxExCd(hwnd, afxArg)
if ErrorLevel <> 0
{
MsgBox, EXCD error
Goto Exit
}
;axpathlist.spiで検索結果の表示
AfxS_Arc(hwnd, "axpathlist.spi")
if ErrorLevel <> 0
{
MsgBox, S_ARC error
Goto Exit
}

Exit:

ndffを使用したバージョン、カレントドライブの検索

;検索結果をあふで表示
#Include %A_ScriptDir%
#Include afxscript.ahk
;作業ディレクトリの移動
SetWorkingDir, %A_ScriptDir%

;ndff.exeのパス
findexe := "ndff.exe"
;afxのウィンドウハンドル取得
hwnd:=AfxFindWindow()

;afxのパス取得
afxPath:= AfxExecPath(hwnd)
;afxで開いている現在のパスを取得
findPath:=AfxPathCWin(hwnd)
;ndffを起動
;検索ドライブの指定
StringLeft, drv, findPath, 1
RunWait, %comspec% /c %findexe% -d %drv%: -fDIRS -sd -silent "%1%" > %afxPath%\find.sz7
;サイズが0なら終了
FileGetSize, size, %afxPath%\find.sz7
if size = 0
{
Goto Exit
}
;&EXCDでフォルダの移動
afxArg= -P"%afxPath%\find.sz7"
AfxExCd(hwnd, afxArg)
if ErrorLevel <> 0
{
MsgBox, EXCD error
Goto Exit
}
;axpathlist.spiで検索結果の表示
AfxS_Arc(hwnd, "axpathlist.spi")
if ErrorLevel <> 0
{
MsgBox, S_ARC error
Goto Exit
}

Exit:
あふのメニューファイルを作成して呼び出します。
"3: find(カレント以下検索)" "C:\Program Files\AutoHotkey\AutoHotkey.exe" D:\HOME\AHK\afxscript-0_12\findtoafx.ahk "$IT"*$K*""$I"find:検索regexは?""
"5: ndff(ドライブ検索)" "C:\Program Files\AutoHotkey\AutoHotkey.exe" D:\HOME\AHK\afxscript-0_12\ndfftoafx.ahk "$IT"*$K*""$I"ndff:検索regexは?""
パスは環境に合わせて変えてください。
axpathlist.spiは同じ名前のファイルが複数あると駄目らしいというのはあるものの
かなり便利です!!

0 件のコメント: