投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/7/12 16:02:51
> 唯一、不明な点があります。甘えてばかりで申し訳ありませんが、もしご存じなら教えてください。
私もさほど詳しくはありません。
ExplorerBrowser の存在も、豆腐さんの今回の質問を受けて初めて見つけたばかりの情報ですし。


ちなみに ExplorerBrowser コントロールというのは、内部的には
COM の IExplorerBrowser インターフェイスを実装しているようです。
https://learn.microsoft.com/ja-jp/windows/win32/api/shobjidl_core/nn-shobjidl_core-iexplorerbrowser

Navigate メソッドは COM の IExplorerBrowser::BrowseToObject メソッドを内部的に呼んでいますね。
https://learn.microsoft.com/ja-jp/windows/win32/api/shobjidl_core/nf-shobjidl_core-iexplorerbrowser-browsetoobject


> 別の検索条件でNavigateしても、ExplorerBrowserは画面更新されないのです。
ExplorerBrowser を介さず、検索した ShellSearchFolder オブジェクトを
直接 For Each 等でループした場合、みかんといちごが同じ結果になりますか?

Dim pKey = SystemProperties.System.FullText
Dim sco = SearchConditionOperation.WordEqual

Dim sc1 = SearchConditionFactory.CreateLeafCondition(pKey, "みかん", sco)
Dim dir = ShellObject.FromParsingName(searchDir)
Dim ssf As New ShellSearchFolder(sc1, DirectCast(dir, ShellContainer))

Dim sc2 = SearchConditionFactory.CreateLeafCondition(pKey, "いちご", sco)
Dim dir2 = ShellObject.FromParsingName(searchDir)
Dim ssf2 As New ShellSearchFolder(sc2, DirectCast(dir, ShellContainer))

ListBox1.DataSource = Nothing
ListBox2.DataSource = Nothing
ListBox1.DisplayMember = "ParsingName"
ListBox2.DisplayMember = "ParsingName"
ListBox1.DataSource = ssf.ToArray()
ListBox2.DataSource = ssf2.ToArray()