Blue Campus
ちょっとした記録

(常識かもしれませんが、)

先日、SHBrowseForFolder のデフォルトパスにネットワークパスを指定するには?の質問にて、
VB6で指定のディレクトリのLPITEMIDLISTの値を取得する方法をいろいろ調べていたところ、
(VC++ならIShellFolder::ParseDisplayNameで取得できる)
K.J.Kさんから

Private Declare Function SHGetIDListFromPath _
    Lib "shell32.dll" Alias "#28" _
( _
    ByRef Path As Byte, _
    ByRef RetPIDL As Long, _
    ByRef RetAttr As Long _
) As Long

ってな関数を使う方法があるのを教えてもらいました。
#28 って何やねん!と思って調べてみたところ、「エントリポイントの序数指定」とのことでした。
つーことは、Win32APIのGetProcAddress関数もできるのかなと調べてみたところ、ちゃんのMSDNに載っていました。
(.NET FrameworkのDllImportでも同様→エントリ ポイントの指定? )

とっても勉強になりました。
だけど、こういう隠し的な関数は本当に知っていないと使えない罠。(引数やら戻り値やらが隠蔽されているので)


ちなみに、.NET FrameworkのFolderBrowserDialogでは任意(ネットワークパス含み)のルートや初期ディレクトリを設定することは
できないのかな?


追記

shell32.dllの序数28番目の関数名ですが、
SHILCreateFromPath
だそうです。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shilcreatefrompath.asp

ついでに、SHGetIDListFromPathでぐぐったときに#162ってのを見かけたが
あれも、
SHSimpleIDListFromPath
って関数名でした。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shsimpleidlistfrompath.asp

# 本当はコメントでレスしようかと思ったけど、なぜかsubmitできなかったので追記編集で。

投稿日時 : 2006年12月24日 17:02
コメント
  • # re: エントリポイントの序数指定([VB6]Declare宣言)
    Blue
    Posted @ 2006/12/25 9:09
    >.NET FrameworkのFolderBrowserDialogでは任意(ネットワークパス含み)のルートや初期ディレクトリを
    >設定することはできないのかな?
    SelectedPathプロパティで、ネットワークパスでも設定できました。
    RootFolderプロパティでは、Environment.SpecialFolderで取得できる
    フォルダしか設定できなさそうです。
  • # re: エントリポイントの序数指定([VB6]Declare宣言)
    Blue
    Posted @ 2006/12/25 10:08
    >http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-7515.htm
    より、Shell.ApplicationオブジェクトのBrowseForFolderメソッド
    で、ルートを指定することが出来るそうです。
    (てっきり、RootFolder引数はShellSpecialFolderConstantsの定数しかダメなのかと思っていた)
  • # re: エントリポイントの序数指定([VB6]Declare宣言)
    K.J.K.
    Posted @ 2007/02/01 18:39
    shell32.dllだと、かなり昔(Windows95時代)のなら、こんな感じ。
    http://www.koalanet.ne.jp/~akiya/vbindeep/shell32.txt
タイトル  
名前  
Url
コメント