This article from Ovidiu Crisan shows four different methods of displaying the ‘Find Files’ dialog from within a Visual Basic Program.
If you want to use ‘Find Files’ standard dialog, in your programs you can choose between the following four methods.
- Using DDE: it’s needed an label control, even invisible.
Private Sub Command1_Click() With Label1 .LinkTopic = "Folders|AppProperties" .LinkMode = vbLinkManual .LinkExecute "[OpenFindFile(,)]" End With End Sub Private Sub Form_Load() Label1.Visible = False Command1.Caption = "Find File (1)..." Me.Caption = "Find File (1)" End Sub
Private Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) ' Private Const VK_LWIN = &H5B Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_APPS = &H5D ' Private Sub Command1_Click() Call keybd_event(VK_LWIN, 0, 0, 0) Call keybd_event(&H46, 0, 0, 0) 'F Call keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0) End Sub ' Private Sub Form_Load() Command1.Caption = "Find File (2)..." Me.Caption = "Find File (2)" End Sub
Private Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" _ (ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long Private Const SW_SHOWNORMAL = 1 Private Const SW_SHOWMINIMIZED = 2 Private Const SW_SHOWMAXIMIZED = 3 Private Const SW_SHOW = 5 Private Const SW_MINIMIZE = 6 Private Const SW_SHOWMINNOACTIVE = 7 Private Const SW_SHOWNA = 8 Private Const SW_RESTORE = 9 Private Const SW_SHOWDEFAULT = 10 Private Sub Command1_Click() Call ShellExecute(Me.hwnd, _ "find", _ Dir1.Path, _ vbNullString, _ vbNullString, _ SW_SHOWNORMAL) End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Form_Load() Command1.Caption = "Find File (3)..." End Sub
Private Declare Function SHFindFiles Lib "Shell32" _ Alias "#90" _ (pidlRoot As Long, pidlSavedSearch As Long) As Long Private Declare Function SHSimpleIDListFromPath Lib _ "Shell32" Alias "#162" _ (ByVal lpszPath As String) As Long ' Private Sub Command1_Click() Dim l As Long l = SHSimpleIDListFromPath(Dir1.Path) SHFindFiles ByVal l, ByVal 0 End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Form_Load() Command1.Caption = "Find File (4)..." Me.Caption = "Find File (4)" End Sub
For the last two methods you need to add a DriveListBox and a DirListBox
control. With this methods you can give the start path for searching.