2016-07-06 15 views
-2

Ich habe ein Formular, das OpenFileDialog aufruft.
Ich möchte eine bestimmte Datei im Vordergrund (Hervorgehoben) im Dateifenster fokussiert werden.
Ist es möglich?
Ich habe Code, wo ich alle Dateien auswählen kann, jetzt möchte ich 1 Datei ausgewählt werden.OpenFileDialog eine Datei vorwählen

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 

Ich bin sicher, dass es möglich ist, 1 Datei auszuwählen, muss ich nur noch die gute WM_COMMAND kennen.
Jede Hilfe wird geschätzt.

Antwort

0

fand ich mich um die Lösung bei der Umsetzung von IShellBrowser, IShellView und IShellFolder. Die Frage kann jetzt geschlossen werden.

0

Legen Sie die Eigenschaften FileName und DefaultExt Ihres Dialogfelds fest, bevor Sie ShowDialog aufrufen, damit MyFile im Ordner Videos vorselektiert wird. Dies öffnet eine Datei mit diesem Namen entweder ohne Erweiterung oder wmv. Jede andere Erweiterung sollte fehlschlagen.

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 
+0

Vielen Dank für Ihre Mühe, aber es funktioniert nicht, die Datei wird nicht im Dateifenster hervorgehoben. Ich möchte, dass die Datei im Dateifenster fokussiert wird, damit ich schnell sehen kann, welche Datei ich zuletzt ausgewählt habe. –

+0

Ihre Frage ist nicht sehr klar, also sollten Sie es aktualisieren. Sie haben nichts über die Hervorhebung der Datei im Dateifenster gesagt. Dies wählt die Datei aus, genau wie Sie gefragt haben. Wenn Sie auf den Button klicken und dann auf Öffnen klicken, wird die Datei geöffnet, sofern sie existiert. Zumindest tut es in VB 2013. Edit: Ich sehe, dass Sie die Hervorhebungsanfrage in einen Kommentar setzen. Habe diese nicht gelesen. Bearbeiten Sie Ihre Frage. – topshot