2016-07-06 9 views
-2

私はOpenFileDialogを呼び出すフォームを持っています。
特定のファイルをファイルペインにあらかじめフォーカスさせたい(ハイライト表示)したい。
可能ですか?
私はすべてのファイルを選択できるコードを持っています。今では1つのファイルを選択します。OpenFileDialogはファイルをあらかじめ選択しています

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を知る必要があります。
ご協力いただければ幸いです。

答えて

0

私は自分自身にIShellBrowser、IShellViewとIShellFolderの実装と解決策を見つけました。質問は今閉じられます。

0

ShowDialogを呼び出す前に、FileNameDefaultExtのプロパティを設定してください。これにより、ビデオフォルダの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 
+0

努力していただきありがとうございますが、動作していません。ファイルはファイルペインで強調表示されていません。私はファイルがファイルペインにフォーカスされるようにしたいので、前回選択したファイルをすばやく見ることができます。 –

+0

あなたの質問はあまり明確ではないので、あなたはそれを更新すべきです。あなたはファイルペインでファイルをハイライト表示することについて何も言わなかった。これはあなたが尋ねたのと同じようにファイルを選択します。 button1をクリックしてからopenをクリックすると、ファイルが存在する場合はそのファイルが開きます。少なくともそれはVB 2013で行います。編集:私はあなたがコメントに強調表示の要求を置くことを参照してください。それらを読まなかった。あなたの質問を編集してください。 – topshot

関連する問題