Отправка клавиши RETURN клавиатуры на удаленном сервере с закрытым подключением к удаленному рабочему столу

У меня есть проект WinForms WebView2, который представляет собой простой бот, запускающий некоторый JavaScript на веб-странице. Я использую JS, чтобы щелкнуть элемент на веб-странице и загрузить файл. Веб-сайт предлагает мне: "Вы уверены, что хотите покинуть страницу?" Диалог, поэтому я хочу отправить нажатие на клавиатуру RETURN, чтобы подтвердить, что я хочу покинуть веб-страницу и загрузить файл.

Я хочу запустить это автоматически с помощью планировщика задач Windows. Этот метод работает, пока я удаленно подключен к моему серверу и окно не свернуто. Однако, когда я не удаленно подключен к моему серверу, мое нажатие клавиши ввода возвращается и возникает ошибка.

Я пробовал этот код с помощью SendKeys

//Get Webview proccess
Process p = Process.GetProcessesByName("msedgewebview2").FirstOrDefault();
if (p != null)
{
    IntPtr h = p.MainWindowHandle;
    SetForegroundWindow(h);
    printToTextbox("pressed ENTER key");
    SendKeys.SendWait("{ENTER}");
    await checkDownloadFinished();
}

Я запускаю своего бота, а затем выхожу из удаленного сеанса. Когда я возвращаюсь, эта ошибка выдается, когда программа достигает SendKeys.SendWait("{ENTER}");

System.ComponentModel.Win32Exception: 'Access is denied'

Я также попробовал пакет Nuget InputSimulator

Process p = Process.GetProcessesByName("msedgewebview2").FirstOrDefault();
if (p != null)
{
    IntPtr h = p.MainWindowHandle;
    SetForegroundWindow(h);
    printToTextbox("pressed ENTER key");
    InputSimulator s = new InputSimulator();
    s.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.RETURN);
    await checkDownloadFinished();
}

После того же процесса я запускаю своего бота и выхожу из удаленного сеанса. Когда я возвращаюсь, я сталкиваюсь с такой ошибкой:

System.Exception: 'Some simulated input commands were not sent successfully. The most common reason
 for this happening are the security features of Windows including User Interface Privacy Isolation
 (UIPI). Your application can only send commands to applications of the same or lower elevation.
 Similarly certain commands are restricted to Accessibility/UIAutomation applications. Refer to the
 project home page and the code samples for more information.'

Есть ли другой способ отправки нажатий клавиш, совместимый с С #? Или есть способ предотвратить появление диалогового окна? Спасибо!

1 ответ

Решение

Ты делаешь это неправильно:-)

Вы должны попробовать посмотреть: CoreWebView2.ScriptDialogOpening Event.

В scriptdialogopening имеет аргументы событий с Accept() способ щелкнуть Ok в диалоге.

Вот ссылка на событие: CoreWebView2ScriptDialogOpeningEventArgs

Теперь тебе не нужно связываться с SendKeys.

Другие вопросы по тегам