2007年12月30日

見てるのに気付かない

本当こういう時に2ちゃんねるは役に立つ

ちょっと改造してみた

;test3.ahk
;2007/12/30作成
;簡易エクスプローラー(ファイルなら実行、フォルダなら潜る+上のフォルダに戻る)
;起動時に最後に\なしのフォルダパスを渡せばそこから起動(空白ある場合は""で囲む)
;なければスクリプトのあるフォルダを開く

;変更点
;2007/12/30
;・フォルダとファイルを判別しやすいように拡張子も表示するようにした
;・フォルダ移動したらタイトルを変更できるようにした
;・FileGetAttribを使ってパスに.が入ってても大丈夫なようにした

;問題点
;・ファイル、フォルダが多いと読み込みに時間がかかる
;・起動時に最後に\ありのパスを引数にして起動してもスクリプトのあるフォルダから起動する

;todo
;・エラーの修正
;・その他バグ?修正

#NoTrayIcon
;引数があったら
If 0 <> 0
{
;引数分割
SplitPath, 1, Name, Dir
;属性取得
FileGetAttrib, Attrib, %1%
;Msgbox, %Attrib%
;引数がフォルダだった場合
IfInString, Attrib, D
{
Path = %Dir%\%Name%
}
;引数がファイルだった場合
Else
{
Path = %Dir%
}
SetWorkingDir, %Path%
}

;Msgbox, %A_WorkingDir%

;ListView1作成
Gui, Add,ListView, R10 w400 gLV vListView1, 名前|拡張子|フルパス
;関数呼び出し
ViewAdd()
;表示
Gui, Show, , %A_WorkingDir%
return

;サブルーチン

LV:
;ダブルクリック以外は無視
if A_GuiEvent = DoubleClick
{
;フルパス取得
LV_GetText(FullPath, A_EventInfo, 3)
;フォルダ判定用+フォルダだった場合に使う
SplitPath, FullPath, Name, Dir
;属性取得
FileGetAttrib, Attrib, %FullPath%
;Msgbox, %Fullpath%, %Attrib%
;項目がフォルダだった場合
IfInString, Attrib, D
{
;MsgBox, %Ext%
;上のフォルダに戻る場合
If LV_GetNext() = 1
{
SplitPath, A_WorkingDir, , Dir
Path = %Dir%
}
;フォルダだった場合
Else
{
;パス改造
Path = %Dir%\%Name%
}
;%A_WorkingDir変更
SetWorkingDir, %Path%
;関数呼び出し
ViewAdd()
}
;ファイルだった場合
Else
{
;MsgBox, %Ext%
;実行
Run, %FullPath%
}
}
return

GuiClose:
ExitApp

;ビューに追加関数
;引数、戻り値共になし
ViewAdd()
{
;再描画停止
GuiControl, -Redraw, ListView1
;ビュー全削除
LV_Delete()
;上のフォルダに戻る用ビュー作成
Lv_Add("","..", "", A_WorkingDir)
;A_WorkingDir読み込み
Loop, %A_WorkingDir%\*.*, 1
{
;拡張子取得
SplitPath, A_LoopFileLongPath, , , Ext
;属性取得
FileGetAttrib, Attrib, %A_LoopFileLongPath%
;Msgbox, %A_LoopFileName%, %Attrib%
;フォルダだった場合
IfInString, Attrib, D
{
Lv_Add("",A_LoopFileName, "", A_LoopFileLongPath)
}
;ファイルだった場合
else
{
Lv_Add("",A_LoopFileName, Ext, A_LoopFileLongPath)
}
}
;幅調整
LV_ModifyCol(1)
;タイトル変更
GUI, Show, , %A_WorkingDir%
;再描画
GuiControl, +Redraw, ListView1
}
検索してたらAutoHotkey スレッド part4 - ソフトウェア板にヒットした
まだまだ改造していく予定