投稿者 豆腐  (社会人) 投稿日時 2023/7/11 23:15:48
魔界の仮面弁士様、ご教示頂いた内容を試したので、結果報告致します。

■「search-msプロトコル」を使って検索結果をExplorerで表示できました。(^^♪
こんな、簡単にできるなんて...という感想です。
「VB.NET/VBA]いずれからでも、コンテンツを含むファイルを表示できました。
検索結果の取得はUIAutomationを使って、自力で、できると思います。

■「ShellWindows コレクションからウィンドウハンドルを拾う方法」

Explorerの設定によってFindWindowの第2引数が変わってきて失敗する場合があるのですね。
ShellWindowsからならそれに左右されずにウィンドウハンドルが取れると....了解しました。

■「WindowsAPICodePackのExplorerBrowserを使った内容検索方法」

ご教示頂いたことにより一応、Excelファイルの「内容(コンテンツ)検索」が出来ました。
CreateLeafConditionの第1引数を「FullText」、第3引数を「WordEqual」で成功しました。
第3引数ばかりに気をとられていました。
当方の環境では、「ValueContains」では検索失敗、「WordEqual」で成功という結果となりました。

唯一、不明な点があります。甘えてばかりで申し訳ありませんが、もしご存じなら教えてください。

検索結果をExplorerBrowserにNavigateした後、別の検索条件でNavigateしても、ExplorerBrowserは画面更新されないのです。
ExplorerBrowserにそれっぽいRefreshメソッドがあったので試しましたがNGでした。
以下のコードで「みかん_Click」の後、「いちご_Click」を実行しても、画面更新されないのです。
では、何故、「期待通りの検索結果が返っているか」が分かったのは、
ExplorerBrowserの「右クリック、コンテキストメニュ」の「最新の情報に更新」を実行すれば画面更新されます。
このコンテキストメニュの「最新の情報に更新」同等のメソッドはないでしょうか?
フォルダを連続でNavigateした場合は、ちゃんと画面更新されます。

FormにExplorerBrowserとButton4つ(みかん、いちご、KnownFolderNavigate、FolderNavigate)、貼り付けてます。
 
Option Strict On
Imports Microsoft.WindowsAPICodePack.Controls
Imports Microsoft.WindowsAPICodePack.Shell
Imports Microsoft.WindowsAPICodePack.Shell.PropertySystem
Public Class Form1
    '検索フォルダ 
    Const searchDir As String = "C:\Users\xxxx\Desktop\検索test"
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim pv = Me.ExplorerBrowser1.NavigationOptions.PaneVisibility
        pv.Navigation = PaneVisibilityState.Hide 'ナビゲーションエリアを非表示 
        pv.Commands = PaneVisibilityState.Hide 'ヘッダ上部のツールバーを非表示 
    End Sub
    '検索結果をExplorerBrowserにNavigate 
    Private Sub SearchNavigate(searchString As String, searchFolder As String)
        Dim pKey = SystemProperties.System.FullText
        Dim sco = SearchConditionOperation.WordEqual
        Dim sc = SearchConditionFactory.CreateLeafCondition(pKey, searchString, sco)
        Dim dir = ShellObject.FromParsingName(searchFolder)
        Dim ssf As New ShellSearchFolder(sc, DirectCast(dir, ShellContainer))
        Me.ExplorerBrowser1.Navigate(ssf)
    End Sub
   
    '「*みかん*」を検索 
    Private Sub みかん_Click(sender As Object, e As EventArgs) Handles みかん.Click
        SearchNavigate("みかん", searchDir)
    End Sub
    '「*いちご*」を検索 
    Private Sub いちご_Click(sender As Object, e As EventArgs) Handles いちご.Click
        SearchNavigate("いちご", searchDir)
    End Sub
    'KnownFolderのNavigate(フォルダを連続でNavigateした場合は、ちゃんと画面更新されます。) 
    Private Sub KnownFolderNavigate_Click(sender As Object, e As EventArgs) Handles KnownFolderNavigate.Click
        Me.ExplorerBrowser1.Navigate(CType(KnownFolders.Desktop, ShellObject))
    End Sub
    '一般FolderのNavigate(フォルダを連続でNavigateした場合は、ちゃんと画面更新されます。) 
    Private Sub FolderNavigate_Click(sender As Object, e As EventArgs) Handles FolderNavigate.Click
        Me.ExplorerBrowser1.Navigate(ShellObject.FromParsingName("C:\windows"))
    End Sub
    Private Sub ExplorerBrowser1_NavigationComplete(sender As Object, e As NavigationCompleteEventArgs) Handles ExplorerBrowser1.NavigationComplete
        MsgBox("NavigationComplete")
    End Sub
End Class