【发布时间】:2014-12-21 05:15:46
【问题描述】:
在默认浏览器中打开 Web 文档是一个已经被回答过无数次的问题。但我对这个问题有一个转折:
如何在 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);
}
它只会获得焦点。
【问题讨论】:
-
您在
ActivateWindow()函数的开头有一个return语句。 -
删除它时它可以工作:D
-
太棒了。对了,你可以treat warning as errors。
return语句会导致 Visual Studio 发出Unreachable code detected警告。如果treat warnings as errors设置为All,您的代码将不会编译。因此,SO 上的时间更少,编码的时间更多:)。 -
我会马上做的。我只是还没有考虑过。这很奇怪,因为我已经编写 Delphi 很多年了,而且我的 Delphi 始终设置为将提示和警告都视为错误。