KageShiron / ExplorerLS

Listing Explorer's path

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ExplorerLS

現在開かれているエクスプローラのパスを表示します。

引数

expls.exe last
最後にアクティブになったエクスプローラのパスを出力します
expls.exe all
すべてのエクスプローラのパスの一覧を表示します。
expls.exe
expls.exe lastと同様
expls.exe help
ヘルプ

その他仕様

  • パスを持たないエクスプローラは列挙されません(仮想フォルダ)
  • iexplore.exeのパスは列挙されません

Usage

Basic Usage

PS> expls.exe
C:\s

PS> expls.exe all
C:\s
C:\Users\minaduki\Desktop
D:\gd\pics

Advanced Usage

Profile.ps1に関数を定義しておくのもおすすめです。

PowerShellで最後にアクティブとなったウィンドウに移動

PS> explorels.exe | Set-Location

エクスプローラのパス一覧から選択して移動

pecoを使用 peco/peco: Simplistic interactive filtering tool

PS> expls.exe all | peco | Set-Location

Build

> msbuild /p:Configuration=Release
> msbuild /t:ILMerge

おまけ

以前使っていたPowerShell

function cde() {
    $shell = New-Object -ComObject Shell.Application
    $exps = $shell.Windows() | Select-Object @{Name = "Name"; expression = {$_.LocationName} } , @{Name = "Path"; expression = {([uri]$_.LocationURL).LocalPath} } | 
        Where-Object {$null -ne $_.Path}
    $exps | ForEach-Object { "({0}) {1}`0{1}" -f $_.Name, $_.Path} | peco --null | Set-Location
}

既存の問題

  • EnumWindowsが列挙する順番は本来保証されていませんが、アクティブになった順に列挙されるという挙動を期待しています。lastが本当に最後にアクティブだったウィンドウを返さない可能性がありますが、現状では仕様です。
  • .NET CoreではなぜかActivator.CreateInstance(Type.GetTypeFromCLSID(CLSID_ShellWindows))が成功しないため、.NET Frameworkを使っています。OleInitializeとか、スレッドアパートメントの変更とかはやってみたのですが、うまくいきません。.NET Coreで動いた方はお知らせください。

License

MIT License

About

Listing Explorer's path

License:MIT License


Languages

Language:C# 100.0%