private bool ProcessSelection(IntPtr handle, bool preferSelection) { IntPtr shelldll_defview = InteropUtil.GetDlgItem(handle, InteropUtil.ID_FileList); IntPtr listview = InteropUtil.GetDlgItem(shelldll_defview, 1); IntPtr focus = InteropUtil.GetFocus(); if (listview == focus || preferSelection) { return(AddSelectedItemsFromSelection(listview)); } else { //check the content of the file combobox IntPtr hFileName = InteropUtil.GetDlgItem(handle, InteropUtil.ID_FileNameCombo); string currentText = (InteropUtil.GetWindowTextW(hFileName) ?? "").Trim(); if (!String.IsNullOrEmpty(currentText)) { try { if (System.IO.Path.IsPathRooted(currentText)) { if (Directory.Exists(currentText) || File.Exists(currentText)) { //the contents of the text box are a rooted path, that points to an existing directory. //we interpret that to mean that the user wants to select that directory. _selected.Add(currentText); return(true); } } else if (!String.IsNullOrEmpty(m_currentFolder)) { string combined = System.IO.Path.Combine(m_currentFolder, currentText); if (Directory.Exists(combined) || File.Exists(combined)) { //the contents of the text box are a relative path, that points to a //an existing directory. We interpret the users intent to mean that they wanted //to select the existing path. _selected.Add(combined); return(true); } } } catch (Exception) { //try to add the selection if (AddSelectedItemsFromSelection(listview)) { return(true); } } } //forward all wrong inputs to the standard mechanism return(false); } }