C# 在默认浏览器中打开或刷新HTML文件

C# 在默认浏览器中打开或刷新HTML文件,c#,.net,C#,.net,在默认浏览器中打开Webdocument是一个已回答多次的问题。但我对这个问题有一个转折点: 如何在C#中在默认浏览器中打开或刷新html文档 如果我尝试这样的事情: private Process ShowFile(string htmlFilename) { var myProcess = new Process(); try { // true is the default, but it is important not to set it to fal

在默认浏览器中打开Webdocument是一个已回答多次的问题。但我对这个问题有一个转折点:

如何在C#中在默认浏览器中打开或刷新html文档

如果我尝试这样的事情:

private Process ShowFile(string htmlFilename)
{
var myProcess = new Process();

    try
    {
        // true is the default, but it is important not to set it to false
        myProcess.StartInfo.UseShellExecute = true;
        myProcess.StartInfo.FileName = htmlFilename;
        myProcess.Start();
    }
    catch (Exception e)
    {

    }

    return myProcess;
}
每次都会打开一个新窗口

*编辑*

我已经尝试过了,但是浏览器没有刷新

public delegate bool EnumThreadWindowsCallback(int hWnd, int lParam);

    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    [DllImport("user32.dll")]
    static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData);

    [DllImport("user32.dll")]
    static extern int GetWindowText(int hWnd, StringBuilder text, int count);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static public extern IntPtr GetForegroundWindow();

    [DllImport("user32.dll")]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);


    private bool FindWindowByRx(int hWnd, int lParam)
    {
        Regex pattern = new Regex("Seneste nyt", RegexOptions.IgnoreCase);
        StringBuilder windowTitle = new StringBuilder(256);
        GetWindowText(hWnd, windowTitle, 255);

        if (pattern.IsMatch(windowTitle.ToString()))
        {
            SetForegroundWindow(new IntPtr(hWnd));
            return false; // abort search
        }
        else
        {
            return true; // keep on searching
        }
    }

    private bool ActivateWindow()
    {
        return EnumWindows(new EnumThreadWindowsCallback(FindWindowByRx), new IntPtr());

        uint KEYEVENTF_KEYUP = 2;
        byte VK_CONTROL = 0x11;
        byte VK_F5= 0x74;

        keybd_event(VK_CONTROL, 0, 0, 0);
        keybd_event(VK_F5, 0, 0, 0);             
        keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0);
        keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    }

它只会获得焦点

首先,包含要刷新页面的浏览器选项卡必须是所选选项卡。根据,您无法激活包含特定url的选项卡。可以,但不能选择所需的选项卡

因此,假设该选项卡已被选中,您可以只需输入并向其发送一个类似于的组合键。例如,对于Firefox,您只能发送一个
ctr+l
(将光标放在地址字段上)和
enter
(这将刷新页面),而不是
ctr+c

或者,至少对于Firefox,您可以发送一个
ctrl+w
,关闭当前选定的选项卡,然后像代码一样打开一个新页面,在您的情况下,该页面将与刚才关闭的页面完全相同


或者,您可以在新浏览器实例(而不是新选项卡)中打开页面。当您想要刷新它时,您可以按名称找到浏览器窗口并将其关闭。然后重新打开一个新的浏览器窗口。如果您感兴趣的选项卡当前可能不是浏览器中选定的选项卡,这将是一个解决方案

您在
ActivateWindow()
函数的开头有一个
return
语句。删除该语句时:DGreat。顺便说一下,你可以。该
return
语句将导致Visual Studio发出
检测到的不可访问代码
警告。如果
将警告视为错误
设置为
所有
,则您的代码不会编译。因此,这样做的时间越少,编码的时间就越多:)。我马上就做。我只是没想过。Wich很奇怪,因为我已经编写Delphi很多年了,我的Delphi总是把提示和wattings都当作错误来处理。我们越来越近了,但我不在那里。我刚刚编辑了我的问题,让你看看我试了些什么