OpenFileDialog预先选择一个文件

时间:2016-07-06 01:08:07

标签: vb.net openfiledialog

我有一个名为OpenFileDialog的表格 我希望在文件窗格中提前聚焦某个文件(突出显示) 有可能吗?
我有代码,我可以选择所有文件,现在我想要选择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

我确定可以选择1个文件,我只需知道好的WM_COMMAND。
任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

在调用FileName之前设置对话框的DefaultExtShowDialog属性,以便在“视频”文件夹中预先选择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

答案 1 :(得分:0)

我发现自己是IShellBrowser,IShellView和IShellFolder实现的解决方案。这个问题现在可以结束了。