Как позвонить .Файл VBS в приложении C#?
I have a windows application in C# which should run the one text.vbs file. (NET Framework 4 Client Profile) (When I run this file manually from any location, it does the job normally). content of text.vbs (used for Show / Hide hidden files folders ...)
Hidden = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden" Set Sh = WScript.CreateObject("WScript.Shell") St = Sh.RegRead(Hidden) If St = 2 Then Sh.RegWrite Hidden, 1, "REG_DWORD" Else Sh.RegWrite Hidden, 2, "REG_DWORD" End If Sh.SendKeys("{F5}")
I've tried many options, but none work. is it possible to call a .vbs file using c#.net? Can anyone please help me on this ? Thanks in Advance.
Что я уже пробовал:
private void Button1_Click(object sender, EventArgs e) { Process Proc = new Process(); Proc.StartInfo.FileName = @"cscript"; Proc.StartInfo.Arguments = "//B //Nologo c:\\text.vbs"; Proc.Start(); Proc.WaitForExit(); Proc.Close(); } or private void Button1_Click(object sender, EventArgs e) { RunVBS(@"C:\text.vbs"); } static void RunVBS(string vbsFilepath) { var proc = System.Diagnostics.Process.Start(vbsFilepath); proc.WaitForExit(); }
Richard Deeming
Что значит "не работает" означает? Вы получаете ошибку?
Вам не нужен файл VBS для изменения реестра; вы можете сделать это непосредственно из вашего .Чистый код.
Вы также можете отправить ключи в приложение из C#:
Отправить ключи.Метод Send(String) (System.Окна.Формы) | Microsoft Docs[^]
Возможно, проблема в том, что вы отправляете ключи не в то приложение?
Member 10410972
Что значит "не работает" означает? Вы получаете ошибку?
Ошибки нет, просто ничего не происходит после выполнения кода.И я хотел бы запустить файл vbs...
Вам не нужен файл VBS для изменения реестра; вы можете сделать это непосредственно из вашего .Чистый код.
Я знаю, что это может быть, но тогда мне нужно перезапустить машину, чтобы эффект был виден ...
Вы также можете отправить ключи в приложение из C#:
Пожалуйста, не могли бы вы быть более конкретными, я не понял ...
Richard Deeming
"Ошибки нет, просто после выполнения кода ничего не происходит."
Тогда вы почти наверняка посылаете F5 ключ к неправильному применению.
"Я знаю, что это может быть, но тогда мне нужно перезапустить машину, чтобы эффект был виден ..."
Изменение реестра С C# ничем не отличается от изменения его с VBS. Если он работает без перезагрузки, когда вы меняете его с VBS, то он будет работать без перезагрузки, если вы меняете его с C#.
- Пожалуйста, не могли бы вы уточнить, я не понял ..."
Вы можете заменить его Sh.SendKeys
вызовите свой сценарий с помощью вызова к SendKeys.Send
в вашем коде C#.
Отправить ключи.Метод Send(String) (System.Окна.Формы) | Microsoft Docs[^]
Member 10410972
Я пробовал что-то вроде этого, но недостаточно хорошо. Я прошу вашей помощи.
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
Registry.SetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "скрытый", 1);
Отправить ключи.Отправить("{F5}");
}
Richard Deeming
Как я уже сказал, Вы почти наверняка посылаете F5 к неправильному окну.
Согласно документации: "Посылает нажатия клавиш к активному приложению."
Поскольку вы реагируете на событие нажатия кнопки в своем собственном приложении, это ваше собственное приложение, которое будет получать входные данные.
После того как вы нажмете кнопку, попробуйте вручную нажать на реальное целевое окно и нажать кнопку F5 чтобы убедиться, что изменение реестра сработало.
Предполагая, что это так, вам нужно будет найти способ идентифицировать и активировать целевое окно с помощью кода перед вызовом SendKeys.Send
.
Member 10410972
Ричард, большое тебе спасибо.
Вот как это работает !!!
Я не знаю ничего лучшего ... Если у вас есть лучший способ, пожалуйста, помогите. Спасибо.
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
Registry.SetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "скрытый", 1);
этот.WindowState = FormWindowState.Свернутый;
Отправить ключи.Отправить("{F5}");
этот.WindowState = FormWindowState.Обычный;
}
Maciej Los
Звучит как ответ.
phil.o
Практически 5'd.