以编程方式从 .Net WinForms 应用程序刷新浏览器的页面

本文关键字:浏览器 刷新 应用程序 WinForms 编程 方式 Net | 更新日期: 2023-09-27 18:33:10

从 asp.net 页面,通过ClickOnce部署,启动.Net WinForms应用程序。在某个时候,WinForm 应用程序需要刷新启动它的网页。

我该怎么做?基于 .Net 的 Windows 应用程序如何刷新已在浏览器中打开的页面?

以编程方式从 .Net WinForms 应用程序刷新浏览器的页面

稳健的方式做到这一点并不容易。例如,用户可能没有使用 IE。

您唯一控制且网页和 Windows 应用程序共有的就是您的 Web 服务器。

这个解决方案很复杂,但这是我能想到的唯一可行的方法。

1) 让网页在 Windows 应用运行之前打开与 Web 服务器的长轮询连接。SignalR目前在这方面得到了很好的报道。

2)让Windows应用程序在想要更新网页时向服务器发送信号。

3) 在服务器上,完成长轮询请求,将信号发送回 Web 浏览器。

4) 在网页中,通过刷新页面来处理响应。

我说这很复杂!

下面是一些示例代码来执行您需要的操作(仅相关部分):

using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        // Get a handle to an application window.
        [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindow(string lpClassName,
            string lpWindowName);
        // Activate an application window.
        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

        private void RefreshExplorer()
        {
            //You may want to receive the window caption as a parameter... 
            //hard-coded for now.
            // Get a handle to the current instance of IE based on window title. 
            // Using Google as an example - Window caption when one navigates to google.com 
            IntPtr explorerHandle = FindWindow("IEFrame", "Google - Windows Internet Explorer");
            // Verify that we found the Window.
            if (explorerHandle == IntPtr.Zero)
            {
                MessageBox.Show("Didn't find an instance of IE");
                return;
            }
            SetForegroundWindow(explorerHandle );
            //Refresh the page
            SendKeys.Send("{F5}"); //The page will refresh.
        }
    }
}

注意: 该代码是此 MSDN 示例的修改。