エクスプローラからフルパス取得 – プログラミング – Home

エクスプローラからフルパス取得
 
通知
すべてクリア

エクスプローラからフルパス取得


タロー
 タロー
(@タロー)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

エクスプローラ(フォーカスがあたっているエクスプローラ)から、表示中のパスを取
得したいのですが、何か良い方法はありませんでしょうか。

【試した方法】
(1)IWebBrowser2のget_LocationURLで取得。
→パスは取得できましたが、ネットワーク上の共有フォルダ上で実行すると、期待した
パスが取得できませんでした。
例)
『\\PC1\共有』を表示しているときに実行すると、
『file:///C:/Documents and Settings/hoge/NetHood/共有%20-%20PC1』
という値が返ってきます。
ただ、『\\PC1\共有\フォルダ1』で実行するときは、『file://PC1/共有/フォルダ1』
と期待した値が取得できます。

(2)ウィンドウハンドルを取得し、アドレスバーに表示されている内容を取得。
→ユーザがアドレスバーの値を変更した場合は、変更された値が取得されてしまう。
→NG

(1)についての回避方法、または、(1)以外に方法でフルパスを取得する方法につ
いて、ご存知の方がいましたら、ご教授いただけないでしょうか。


引用解決済
トピックタグ
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

フォルダの参照ダイアログなんかでも同様の仕様のようで
IWebBrowser2でもここのパスを直接取得するのは無理かもしれませんね。

NetHood配下にあるフォルダの中には実際にはtarget.lnkというファイルが入っていて
それがリンク先になっているようです。
リンク先がサイトとかでない場合はこのショートカットをIShellLinkにロードすれば
一応リンク先パスは取れるかもしれません。


返信引用
浩二
 浩二
(@浩二)
ゲスト
結合: 16年前
投稿: 19
 

get_LocationURL ではなく、
get_LocationName ではどうでしょうか?


返信引用
浩二
 浩二
(@浩二)
ゲスト
結合: 16年前
投稿: 19
 

すいません、よく読んでいませんでした。
フルパスなら、get_LocationNameでは無理ですね。

IShellViewから、IFolderView、IPersistFolder2とインタフェースを取得していき
IPersistFolder2::GetCurFolderでITEMIDLISTが取得できるので、
IShellFolder::GetDisplayNameOf()でファイル名やパス名が取得できます。


返信引用
浩二
 浩二
(@浩二)
ゲスト
結合: 16年前
投稿: 19
 

昔同じ内容のことをやりましたが、
エクスプローラでコントロールパネルを見ていた時や、
ZIPフォルダの中を見ていたときなど、
色々な形式でパスが返却されますので、意外と面倒です。


返信引用
タロー
 タロー
(@タロー)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

subaruさん、浩二さんありがとうございます。

IShellViewっていうのがあったんですね。
これは行けそう!と思いながら試してみました。

実行結果は、
『C:\Documents and Settings\hoge\NetHood\共有 - PC1』
でした。残念です。

ちなみに、GetDisplayNameOf()の引数が以下の場合を試しています。
SHGDN_NORMAL|SHGDN_FORPARSING
 →結果『C:\Documents and Settings\hoge\NetHood\共有 - PC1』
SHGDN_FORADDRESSBAR|SHGDN_FORPARSING]
 →結果『C:\Documents and Settings\hoge\NetHood\共有 - PC1』
SHGDN_NORMAL
 →結果『共有 - PC1』
SHGDN_FORADDRESSBAR
 →結果『共有 - PC1』


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました