※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

最近使ったファイル

RecentView.ahk はてなブックマークに登録


「最近使ったファイル」をリストアップ、migemo でインクリメンタルサーチ
@あれこれ-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

-
この日記のはてなブックマーク数