1

我有一个 WinForms WebView2 项目,它是一个在网页上运行一些 JavaScript 的简单机器人。我正在使用 JS 单击网页上的元素并下载文件。该网站提示我“您确定要离开该页面吗?” 对话框,所以我想发送 RETURN 键盘按下以确认我想离开网页并下载文件。

我想使用 Windows 任务计划程序自动运行它。只要我远程连接到我的服务器并且窗口没有最小化,这种方法就可以工作。但是,当我没有远程连接到我的服务器时,我的 enter 按键返回并出现错误。

我用 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();
}

我启动我的 Bot,然后退出我的远程会话。当我返回时,程序到达时会出现此错误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.'

是否有另一种与 c# 兼容的方式来发送击键?或者有没有办法防止对话框弹出?谢谢!

4

1 回答 1

1

你这样做是错的 :-)

您应该尝试查看:CoreWebView2.ScriptDialogOpening Event

它的scriptdialogopeningeventargs 具有Accept()单击Ok对话框的方法。

这是 eventargs 链接:CoreWebView2ScriptDialogOpeningEventArgs

现在你不必搞砸了SendKeys

于 2020-11-18T04:50:32.287 回答