AutoHotKey_Lで、Explorerのファイル操作を便利に。

 エクスプローラで「カレントフォルダ/選択ファイルのフルパスをコピー」「選択アイテムを上のフォルダへ移動」「選択フォルダの中身を吸い上げる」のみっつを実現してみた。アンドゥ/リドゥ対応。

$F12::
  PathList := GetSelectItemPath()
  if PathList {
    SplashView(PathList)
    Clipboard := PathList
  } else {
    WinGetText, CurPath, A
    RegExMatch(CurPath, "([A-Z]:\\[^\r\n]*)", $)
    SplashView($1)
    Clipboard := $1
  }
return

^u::
  PathList := GetSelectItemPath()
  if !PathList
    return
  Loop, Parse, PathList, `n, %A_Space%%A_Tab%
  {
    SendPath := A_LoopField
    break
  }
  SplitPath, SendPath, , SendPath
  SplitPath, SendPath, , SendPath
  MsgBox, 292, 選択中のアイテムを上のフォルダへ移動, 以下のフォルダ・ファイルを上のフォルダへ移動します。`n`n%PathList%
  IfMsgBox, No
    return

  Loop, Parse, PathList, `n, %A_Space%%A_Tab%
  {
    SendDir := ComObjCreate("Shell.Application").NameSpace(SendPath)
    SendDir.moveHere(A_LoopField)
  }
  SendDir :=
return

^r::
  PathList := GetSelectItemPath()
  if !PathList
    return
  Loop, Parse, PathList, `n, %A_Space%%A_Tab%
  {
    SendPath := A_LoopField
    break
  }
  SplitPath, SendPath, , SendPath
  MsgBox, 292, 選択中のフォルダの中身を上のフォルダへ移動, 以下のフォルダの中身をこのフォルダに移動します。`n`n%PathList%
  IfMsgBox, No
    return

  ShellApp := ComObjCreate("Shell.Application")
  SendDir := ShellApp.NameSpace(SendPath)
  Loop, Parse, PathList, `n, %A_Space%%A_Tab%
  {
    FileGetAttrib, FileAttrib, %A_LoopField%
    IfNotInString, FileAttrib, D  ; フォルダでなければ無視
      continue
    
    SendDir.moveHere(ShellApp.NameSpace(A_LoopField).Items)
    
    If CheckBlankDir(A_LoopField)
      FileRemoveDir, %A_LoopField%
  }
  ShellApp :=, SendDir :=
return

GetSelectItemPath() {  ; AutoHotkey スレッド part11 >>913
  for Window in ComObjCreate("Shell.Application").Windows
    if ( Window.hwnd == WinExist() ){
      for Item in Window.Document.SelectedItems
        FileList .= Item.Path "`n"
      break
    }
  StringTrimRight, FileList, FileList, 1
  return, FileList
}

CheckBlankDir(TrgDir) {
  Loop, %TrgDir%/*, 1
    return, 0
  return, 1
}

SplashView(TextBuf, Timer = 1500) {
  Progress, B1 ZH0 W800, %TextBuf%
  SetTimer, SplashClose, %Timer%
}

SplashClose:
  SetTimer, SplashClose, Off
  Progress, Off
return

 "Loop, Parse"~のとこは、正規表現で取り出した方がいいのかなー? 正規表現だと負荷高そう(※個人の思い込みです)。

 エクスプローラのアンドゥ/リドゥが使いたくてCOM使ってみたのだが、このあたりが素人の限界か。一度のアンドゥ/リドゥで、任意の(ワイルドカードで示せない)複数ファイルを操作するにはどうすりゃいいんだ?


[PR]
by lordnoesis | 2012-10-14 22:24 | テクノロジ | Trackback | Comments(0)
トラックバックURL : http://poimono.exblog.jp/tb/18563813
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
名前
URL
画像認証
削除用パスワード

※このブログはコメント承認制を適用しています。ブログの持ち主が承認するまでコメントは表示されません。

ブログトップ | ファンになる