JURIA @Wiki
RecentView.ahk
最終更新:
juria
-
view
最近使ったファイル
RecentView.ahk &bookmark_hatena(show=none)
「最近使ったファイル」をリストアップ、migemo でインクリメンタルサーチ
@あれこれ-2007年7月参照
@あれこれ-2007年7月参照
[2008-01-25]シェルのコンテキストメニューを開けるように
[2007-09-29]右クリックメニュー追加
![]() |
![]() |
/* RecentView.ahk 2008.01.25 版 「最近使ったファイル」をリストアップ、migemo でインクリメンタルサーチ ・流行らせるページ管理人 さまの migemo.ahk を使用させていただいてます。 http://lukewarm.s101.xrea.com/myscripts/index.html 必要なファイルは migemo.ahk を参照のこと。 ・ファイル名・フォルダ名とリンク先ファイルの拡張子を一覧表示 ・エディット部にファイル名の一部を入力(migemo スタート) ・タイトルバーにファイル総数、ステータスバーにマッチファイル数を表示 ・タブでコントロールを移動、カーソルキーでリスト移動・選択 ・項目を選択すると、ステータスバーにリンク先のディレクトリを表示。 ・項目をダブルクリック、または選択状態にして Enter でリンク先のパスを ポチエス関連付け版に渡す。 ・右クリックメニューから、 ・リンク先ファイルのあるフォルダ(リンク先がフォルダの場合はその 上位フォルダ)を開く、 ・リンク先ファイル・フォルダ(target)のフルパスをクリップボードにコピー、 ・リンク先ファイル・フォルダ(target)のコンテキストメニューを開く、 ・ショートカットファイルをゴミ箱に入れる(個別・全て)。 フルパスのコピーは poafag さまの file:///形式とかでフルパス取得する AHK(http://d.hatena.ne.jp/poafag/20060831/1157027879)を、 コンテキストメニュー表示は Contextmenu(http://cspace.s2.xrea.com/ 単機能ツール集)を使わせて頂いてます。 ・拡張子欄が空欄になってるものは、フォルダ。 ・フォルダへのショートカットの場合、ファイル名中、つまりフォルダ名に [.] があると拡張子として表示してしまう→動作には問題なし。 */ #Include %A_ScriptDir%\migemo.ahk pochi_s = D:\Application\Launcher\esExt5\esExt5.exe ; ポチエスのパス recent = %UserProfile%\Recent\*.* ;;; ----- 一覧作成 ----- GUI, Margin, 1, 1 Gui, Add, Edit, vEdit gMatch w200 Gui, Add, ListView, r20 w200 AltSubmit vRecentView gRecentView, Name|Ext Gui, +Resize Gui, Add, Button, xm+30 Default gButtonOpenFile, OpenThis Gui, Add, Button, x+30 gButtonCancel, Cancel Gui, Add, StatusBar MigemoOpen(A_ScriptDir "\dict\migemo-dict") ; 「最近使ったファイル」リスト Loop, %recent% { lists() } LV_ModifyCol(1, 142) ; 列の幅指定 LV_ModifyCol(2, 36) LV_ModifyCol(2, "Sort") ; 2列目でソート LV_Modify(1,"Select Focus") ; ソート後1行目を選択・フォーカス SB_SetParts(30) ; ステータスバーの分割幅指定 Gui, Show, , %num% recent files ;タイトルバー(最近使ったファイルの総数) Return ;;; ----- インクリメンタルサーチ ----- Match: GuiControlGet,Ed,,Edit len := StrLen(Ed) LV_Delete() GuiControl,-Redraw,RecentView MigemoSet(Ed) Loop, %recent% { filename := A_LoopFileName Loop, Parse, filename, "`n" { StringSplit, file, filename, . if(len > 0) { ifInString, A_LoopField, %Ed% { lists() } else if(MigemoMatch(A_LoopField) && len > 1) { lists() } } if(len = 0) lists() } } LV_ModifyCol(2, "Sort") ; 2列目でソート LV_Modify(1,"Select Focus") ; ソート後1行目を選択・フォーカス GUIControl, +Redraw, RecentView Return ;;; ----- イベント ----- RecentView: ; ダブルクリック if A_GuiEvent = DoubleClick { targetfile() Run, %pochi_s% %OutTarget% } ;Return ; 項目選択 if A_GuiEvent = I ; リストビューの選択状態 { targetfile() if ErrorLevel = S ; 選択されたら Outdir = %OutDir% num := LV_GetCount(S) SB_SetText(A_Space num, 1) ; ステータスバーに表示 SB_SetText(OutDir, 2) } Return ; [Open This]ボタン、ENTER ButtonOpenFile: targetfile() Run, %pochi_s% %OutTarget% Return ; 右クリックメニュー・アプリケーションキー GuiContextMenu: Menu, ContextMenu, Add, directory, target Menu, ContextMenu, Add, clip path, clip Menu, ContextMenu, Add, Shell ContextMenu, context Menu, ContextMenu, Add, recycle, recycle Menu, ContextMenu, Add, recycleAll, recycleAll Menu, ContextMenu, Show Return target: targetfile() ;Run, D:\Application\Filer\afx0165\yaafxcmd.exe -s -l "%OutDir%" Run, %pochi_s% %OutDir% Return clip: targetfile() Run, %A_ScriptDir%\AutoHotkey.exe %A_ScriptDir%\scripts\file_path.ahk "%OutTarget%" Return context: targetfile() Run, path\to\ContextMenu.exe "%OutTarget%" Return recycle: FileRecycle, %UserProfile%\Recent\%file%.lnk Gosub, Match ; サーチ中の最新状態にするか ; re() ; 全ファイルのリストを更新するか Return recycleAll: FileRecycle, %UserProfile%\Recent\*.lnk re() Return ;;; ----- ファイルリスト表示関数 ----- lists() { global SplitPath,A_LoopFileFullPath,file,dir,ext,name,drive SplitPath, name, file,dir,ext,name,drive StringSplit, file, name, . ; ファイル名を.で分割 If file0 > 2 ; 分割した文字列が3つ以上なら { LV_Add("", name) ; ファイル名のみ表示 } else { LV_Add("", name, ext) ; 2分割以下なら } num := LV_GetCount() } ;;; ----- リスト再取得 ----- re() { global LV_Delete() GuiControl,-Redraw,RecentView Loop, %recent% { lists() } LV_ModifyCol(2, "Sort") ; 2列目でソート LV_Modify(1,"Select Focus") ; ソート後1行目を選択・フォーカス GUIControl, +Redraw, RecentView GuiControl, , Edit ; GuiControl, Focus, Edit } ;;; ----- リンク先の情報取得関数 ----- targetfile() { global SelectedFile := LV_GetNext(0, "F") ;LV_GetText(OutputVar, RowNumber [, ColumnNumber]) LV_GetText(file, SelectedFile, 1) LV_GetText(ext, SelectedFile, 2) If ext = { file = %file% FileGetShortcut, %UserProfile%\Recent\%file%.lnk, OutTarget SplitPath, OutTarget, , OutDir } else { file = %file%.%ext% IfInString, ext, lnk { FileGetShortcut, %UserProfile%\Recent\%file%, OutTarget SplitPath, OutTarget, , OutDir } else { FileGetShortcut, %UserProfile%\Recent\%file%.lnk, OutTarget ;, OutDir SplitPath, OutTarget, , OutDir } } Return } ButtonCancel: GuiClose: GuiEscape: MigemoClose() ExitApp