Member 10410972 Ответов: 1

Как позвонить .Файл 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.

1 Ответов

Рейтинг:
12

Richard Deeming

Как уже говорилось в комментариях, для этого вам не нужен скрипт VBS. Все, что вы делаете в своем файле скрипта, можно сделать на языке C#, используя Registry.GetValue[^], Реестра.Метод setValue[^], и Sendkeys будет.Отправить[^].

Проблема в том, что SendKeys это отправка входных данных в окно вашего приложения, потому что это активное приложение, когда вы нажимаете кнопку. Вам либо нужно установить фокус на правильное окно перед вызовом SendKeys.Send, или сверните окно вашего приложения, чтобы активировать предыдущее окно.


Maciej Los

5ed!