フォルダ選択ダイアログを使いたかったので、このサイトのAPI技術の
サンプルや、下記サイトに置いてあった
( http://www.alato.ne.jp/kazu-/vb/tip06.htm )
SHBrowseForFolder 使用法サンプルを参考にしてとあるフォルダを
デフォルトにして開いたり、変更したり、を試しました。
ローカルパスについてはすべて正しく期待通りに選択・表示できましたが、
ネットワークパスは、うまくデフォルトとしては表示されませんでした。
ネットワーク全体 -> Microsoft Windows Network -> workgroup までが
展開されるだけでした。
実際にはツリー下部に共有フォルダ一覧がリストされるので、そこから
目的のネットワークパスまでたどることは可能ですし、
マッピング済み(ネットワークドライブ割り当て済み)の
ネットワークパスはデフォルトフォルダとして機能しましたが、
できればマッピングしていなくても、SHBrowseForFolder で
ネットワークパスをデフォルトとして開きたいと思っています。
どなたか上記の実現方法をご存じないでしょうか?
(ネットワークパスをデフォルト指定できないのは
仕様なのでしょうか?)
VCの掲示板のスレですが参考になりますでしょうか。
ディレクトリ選択ダイアログでUNCパスも使える様にするには?
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200612/06120026.txt
>VCの掲示板のスレですが参考になりますでしょうか。
なんか論点がずれていましたね。
一応MSDNには
<MSDN>
Pointer to an item identifier list (PIDL) specifying the location of the root folder from which to start browsing.
Only the specified folder and any subfolders that are beneath it in the namespace hierarchy will appear in the dialog box.
This member can be NULL; in that case, the namespace root (the desktop folder) is used.
</MSDN>
http://msdn2.microsoft.com/en-gb/library/ms538017.aspx
ってなっていますね。仕様っぽい。
ちなみに
>SHBrowseForFolder
を使わなくても VB なら Shell.Application オブジェクトの
BrowseForFolder メソッドを使うと簡明です。
結局、ネットワーク上のフォルダはルートには出来ませんけど。
それと、試しにVCでコールバック関数を使ってルートではなく
選択状態に出来ないかと試してみましたが、マイネットワークまでしか選択できないようです。
>結局、ネットワーク上のフォルダはルートには出来ませんけど。
あ〜ちがう。
LPITEMIDLISTの値が取得できればルートには出来るようです。
(SHBrowseForFolderで取得したものをpidlRootに入れて再度SHBrowseForFolderを呼んだら
確かにルートにはなっていた。)
ただSHBrowseForFolder以外で LPITEMIDLISTの値 が取得できるのかはよくわからない。
LPITEMIDLISTが何なのかを理解する必要性がありそう。
連投ですが、、、
VCであればIShellFolder::ParseDisplayNameから
指定のディレクトリのLPITEMIDLISTの値を取得することが出来ました。
参考:http://www.kab-studio.biz/Programing/Codian/ShellExtension/03.html
VBは、、、、正直わかりません。
(最悪VCでDLLを作ってみたいな事をすれば可能)
なんか、もっそい勘違いしていますね自分。。。orz
デフォルトのパスってことはルートにしたいというわけではない、
選択状態にしたい。
って事ですね。
これもすでに調査済みで
> ネットワーク全体 -> Microsoft Windows Network -> workgroup までが
> 展開されるだけでした。
ということだったのですね。
# URLのWebサイトが見れなかったからなぁ、、、
SendMessageで出来ないとなると、やっぱ無理なのかなぁ。
こういうサンプルを希望ということ?
http://www.koalanet.ne.jp/~akiya/vbtaste/vbp/FldrDlg.lzh
>SHGetIDListFromPath
ってなのがあるのですね。勉強になりました。
(エントリポイントの序数指定始めてみた。)
>SendMessageで出来ないとなると、やっぱ無理なのかなぁ。
wParamをFALSEにすればできましたね。
Blueさん、K.J.K.さん、お忙しいところすみません。
>Blueさん
いろいろありがとうございます。
その後いろいろやってみて、
上位階層に上がらせない方法
(Blueさんが紹介してくれたルート指定で開く方法)、も含め
いろいろ試しましたが、本件には合わないやり方みたいです・・・。
なお当方は下記を参考にしていました。
#75 ( http://www.alato.ne.jp/kazu-/ )
=> VisualBASIC => フォルダ指定ダイアログを表示する
コレが先のURL ( http://www.alato.ne.jp/kazu-/vb/tip06.htm )
と、
Oka Laboratory ( http://homepage1.nifty.com/OkaLab/Index.html )
=> プログラミング研究室 => Visual Basic Tips の フォルダの選択
Oka Laboratory は、使う定数の解説もあってすごく助かりました。
>K.J.K.さん
教えてもらったサンプルがまさにヒットです!
あのサンプルの「選択する/されたフォルダの表示名(F)」の内容を
ネットワークパスにしたところ、正しくそのパスが開いた状態で
表示されました。 まさにコレがやりたいのです。
現在、このサンプルを参考にしているところです。
皆さん、どうもありがとうございました。
なんか、こちらが貼り付けたURLには右端に半角スペースが
くっついちゃっててクリックでは飛べなくなってますね。
(無理に空白あけて記載しなきゃよかったな・・・。orz)
該当URLをアドレスバーに貼って右端の半角スペースを削ってもらえれば
飛べると思いますので、よかったら見てみてください。
ツイート | ![]() |