OpenFileDialog pre select 一个文件

OpenFileDialog pre select a file

我有一个调用 OpenFileDialog 的表单。
我希望在文件窗格中预先聚焦(突出显示)某个文件。
可能吗?
我有可以 select 所有文件的代码,现在我想要 selected.

1 个文件
Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim OpenFileDialog1 As New OpenFileDialog
        OpenFileDialog1.Filter = "All files (*.*)|*.*"
        OpenFileDialog1.RestoreDirectory = True
        OpenFileDialog1.FileName = "C:\MyFile.wmv"
        OpenFileDialog1.InitialDirectory = My.Settings.VideoDirectory
        OpenFileDialog1.Multiselect = True
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            My.Settings.VideoDirectory = Path.GetDirectoryName(OpenFileDialog1.FileName)
        End If

    End Sub

    Dim m_lastDialogHandle As IntPtr

    Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    Public Declare Function FindWindowExW Lib "user32.dll" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As IntPtr, <MarshalAs(UnmanagedType.LPWStr)> ByVal lpszClass As String, <MarshalAs(UnmanagedType.LPWStr)> ByVal lpszWindow As String) As IntPtr

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        MyBase.WndProc(m)
        If m.Msg = 289 Then  ' Notify of message loop
            Dim dialogHandle As IntPtr = m.LParam
            If (dialogHandle <> m_lastDialogHandle) Then
                Dim hChild1 As IntPtr = 0
                Dim hChild2 As IntPtr = 0
                Dim hChild3 As IntPtr = 0
                m_lastDialogHandle = dialogHandle
                hChild1 = FindWindowExW(dialogHandle, 0, "DUIViewWndClassName", Nothing)
                If hChild1 = 0 Then Exit Sub
                hChild1 = FindWindowExW(hChild1, 0, "DirectUIHWND", Nothing)
                If hChild1 = 0 Then Exit Sub
                Do
                    hChild2 = FindWindowExW(hChild1, hChild2, Nothing, Nothing)
                    If hChild2 = 0 Then Exit Sub
                    hChild3 = FindWindowExW(hChild2, 0, "SHELLDLL_DefView", "ShellView")
                Loop Until hChild3 <> 0
                SendMessage(hChild3, &H111, &H17021, 0)
            End If
        End If
    End Sub

End Class

我确信 select 1 个文件是可能的,我只需要知道好的 WM_COMMAND。
任何帮助将不胜感激。

在调用 ShowDialog 之前设置对话框的 FileNameDefaultExt 属性,这样这将预先 select MyFile 在您的视频文件夹中。这将打开一个没有扩展名或 wmv 的同名文件。任何其他扩展都应该失败。

Dim OpenFileDialog1 As New OpenFileDialog
OpenFileDialog1.Filter = "All files (*.*)|*.*"
OpenFileDialog1.RestoreDirectory = True
OpenFileDialog1.FileName = "MyFile"
OpenFileDialog1.DefaultExt = "wmv"
OpenFileDialog1.InitialDirectory = My.Settings.VideoDirectory
OpenFileDialog1.Multiselect = True
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    My.Settings.VideoDirectory = Path.GetDirectoryName(OpenFileDialog1.FileName)
End If

我通过实施 IShellBrowser、IShellView 和 IShellFolder 找到了自己的解决方案。现在可以关闭问题了。