2015-12-01 1 views
0

Использование кода VB.NET, как я могу открыть процесс проводника для поиска результатов на основе критериев из формы? Например: поле формы A имеет в нем число «1», а поле формы B имеет в нем дату «2015-11-30». Объединив эти два критерия в коде VB, я хочу запустить процесс проводника и отобразить все имена файлов в данной корневой папке, содержащей шаблон «1 2015-11-30». (По сути, это были бы те же самые результаты, которые я бы набрал выше в поле поиска Explorer в Windows 7, за исключением того, что мне нужно его закодировать.)Открытый процесс Explorer с шаблоном поиска по имени файла (VB.NET)

UPDATE 25 января: Я вернулся к этой последней оставшейся проблеме после завершая все другие кодировки проекта, и у меня все еще возникает проблема в Windows 7 (отлично работает в Windows 10) после долгих исследований. Некоторая дополнительная полезная информация, которую я могу предложить на этот раз, показана ниже. Заметьте, я также попробовал синтаксис AQS Search, используя кодировку url в месте Crumb и все еще получаю ту же ошибку времени выполнения. Также обратите внимание: я НЕ получаю ошибку времени выполнения, когда я оставляю аргумент Crumb, но это мало практическое применение для меня, просто наблюдение.

Наконец, я также попробовал код на других машинах Win 7 в корпоративных офисах и получил ту же ошибку времени выполнения. Возможно, кто-то может попробовать код ниже фрагмента ниже на их Win 7 и сообщить, что они получают?

импортированы АССАМБЛЕЙ:

Imports System 
    Imports System.IO 
    Imports System.Text 
    Imports System.Drawing.Imaging 
    Imports System.Threading 
    Imports System.Configuration 
    Imports System.Net.Mail 
    Imports Microsoft.Win32 
    Imports System.Web 
    Imports System.ComponentModel 
    Imports System.Windows 

ПОИСК КНОПКА фрагмент кода, ВКЛЮЧАЯ Messagebox OUTPUT строки поиска:

Dim searchString As String 
    Dim Search As String 
    searchString = ControlChars.Quote & "  " & Me.DateTimePicker1.Value.Year.ToString & "-" & Me.DateTimePicker1.Value.Month.ToString().PadLeft(2, "0") & "-" & Me.DateTimePicker1.Value.Day.ToString().PadLeft(2, "0") & ControlChars.Quote 
    Search = "search-ms:query=System.FileName:~=" & searchString.ToString & "&crumb=location:" & strArchiveDirectory_SHARED & ",recursive" & "&" 
    MessageBox.Show(Search) 'Messagebox shows: search-ms:query=System.FileName:~="  2016-01-25"&crumb=location:C:\EPS\Enforcement Photos Archive_DEMO,recursive& 
    Process.Start(Search) 

Ошибка выполнения:

System.ComponentModel.Win32Exception was unhandled 
    ErrorCode=-2147467259 
    HResult=-2147467259 
    Message=The system cannot find the file specified 
    NativeErrorCode=2 
    Source=System 
    StackTrace: 
     at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start() 
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start(String fileName) 
    at EPS.Form1.btnSearch_Click(Object sender, EventArgs e) in E:\Code Development\Visual Studio 2013\EPS\EPS\Form1.vb:line 622 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) 
    at System.Windows.Forms.Control.SendMessage(Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.Control.ReflectMessageInternal(IntPtr hWnd, Message& m) 
    at System.Windows.Forms.Control.WmCommand(Message& m) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ScrollableControl.WndProc(Message& m) 
    at System.Windows.Forms.Form.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) 
    at System.Windows.Forms.NativeWindow.DefWndProc(Message& m) 
    at System.Windows.Forms.Control.DefWndProc(Message& m) 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() 
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() 
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) 
    at EPS.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

ДВОЕ веб-ресурса ССЫЛКИ I СПРАВОЧНАЯ ИНФОРМАЦИЯ:

https://msdn.microsoft.com/en-us/library/ff684385.aspx https://msdn.microsoft.com/en-us/library/windows/desktop/cc144080(v=vs.85).aspx

+0

Возможно, вам захочется изучить сохраненные поисковые запросы для Проводника, а затем запустить их как процесс, как это предлагается в этом ответе SuperUser: http://superuser.com/questions/499238/command-to-open-windows-explorer -window-with-filter-results – Adrian

+0

Привет Адриан. Извините за задержанный ответ, и спасибо, что нашли время ответить.Если я не упустил что-то в предложении «Сохраненный поиск», я не вижу, как это будет работать, поскольку критерии поиска определяются пользователем через пользовательский интерфейс приложения. – AlanGrant

+0

Вы должны ввести данные из формы и использовать ее для создания содержимого сохраненного файла поиска (формат которого можно легко распознать путем создания сохраненного поиска с типом интересующих вас критериев, а затем его сохранения) , а затем выполните этот файл. Вы можете удалить его после этого, если хотите. – Adrian

ответ

0

После долгих проб & ошибок я нашел решение, которое позволяет мой Функция поиска приложения работает как в Windows 7, так и 10 (она разбилась на 7).

Ответом было то, что мне пришлось вручную URL-кодировать местоположение крошки, используя метод Replace. Метод URLEncode из HttpUtility не кодировал всю строку местоположения по причинам, которые я до сих пор не знаю.

Мое решение ниже:

Dim urlEncodedLocationA As String = strArchiveDirectory_SHARED.Replace(":", "%3A") 
    Dim urlEncodedLocationB As String = urlEncodedLocationA.Replace("\", "%5C") 
    Dim urlEncodedLocationC As String = urlEncodedLocationB.Replace(" ", "%20") 

    searchString = ControlChars.Quote & Me.txtBadgeNumber.Text & "  " & Me.DateTimePicker1.Value.Year.ToString & "-" & Me.DateTimePicker1.Value.Month.ToString().PadLeft(2, "0") & "-" & Me.DateTimePicker1.Value.Day.ToString().PadLeft(2, "0") & ControlChars.Quote 
    Search = "search-ms:query=System.FileName:~<" & searchString.ToString & "&crumb=Location:" & urlEncodedLocationC & ",recursive" & "&" 'Search STARTS (~<) with the badge/date string. 
    Process.Start(Search) 

Там может быть лучше, но это работает для меня.

Спасибо тем, кто ответил, указав на меня в правильном направлении.

0

попробовать с этим,

dim s as string= TextBox1.text & Textbox2.text 
dim srch as string= "search-ms:query="& s &"&crumb=location:<Yourlocation>&" 
Process.start(srch) 

Надежда это будет Спарк к вашему solution.Reference на более CommandLine Options

+0

Akhil, вы можете быть на что-то. Я получаю результаты, когда просто использую Process.Start ("search-ms: query = mystringhere"), однако я получаю сообщение об ошибке «Ошибка файла не найден» при включении аргумента Crumb. Похоже, что параметр Location and Folder не поддерживается post -XP (https://msdn.microsoft.com/en-us/library/windows/desktop/bb266520(v=vs.85).aspx). Есть ли другой способ для создания этого протокола под Windows 7 или какой-либо другой метод, который вы знаете, чтобы выполнить мою задачу? Я ценю, что вы помогаете. – AlanGrant

+0

, но я пробовал то же самое в win 7 ... –

+0

Хорошо, должно быть, я что-то не так. Я попробую еще раз. Спасибо. – AlanGrant

Смежные вопросы