我想完全摆脱“脱机工作”消息框。
要提供某些背景信息,此消息框会显示在运行本地 webapp的计算机上。
对网络的访问显然是不稳定的,因此暂时缺乏永远不会阻塞:它只会延迟一些后台通知。网页仅需要显示本地资源。网址看起来像http://localhost:4444/*myApp*/...
该机器在XP专业版上运行,浏览器为IE8。
我尝试了以下解决方案但没有成功:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\WebCheck\LoadSens
和LoadLCE
设置为 auto
,然后 no
,然后 { {1}} 我试图以每200ms调用此方法以编程方式强制在线模式
yes
最后的尝试几乎可行。 '离线工作'永远不会被检查,但有时(确实非常随机)会出现邪恶的消息框。问题是,尽管它永远不会阻塞(工作模式切换到在线以便页面正常工作)但它会干扰最终用户。
一句话:即使看起来有点奇怪,我们也无法改变架构(本地Web应用程序)。
答案 0 :(得分:1)
由于其他人无法帮助我,我终于找到了解决方案。有点脏,但工作一个。
诀窍是模拟点击“再试一次”按钮。我是通过使用user32.dll
函数完成的。以下是步骤:
FindWindow
函数找到父窗口的句柄。 FindWindowEx
的按钮。SendMessage
以下是所需功能的声明
// For Windows Mobile, replace user32.dll with coredll.dll
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
const uint WM_CLOSE = 0x10;
const uint BM_CLICK = 0x00F5;
以下是使用它们的方法
private bool ClickButton(String window, String button)
{
IntPtr errorPopUp;
IntPtr buttonHandle;
bool found = false;
try
{
errorPopUp = FindWindow(null, window.Trim());
found = errorPopUp.ToInt32() != 0;
if (found)
{
found = false;
buttonHandle = FindWindowEx(errorPopUp, IntPtr.Zero, null, button.Trim());
found = buttonHandle.ToInt32() != 0;
if (found)
{
SendMessage(buttonHandle, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
Trace.WriteLine("Clicked \"" + button + "\" on window named \"" + window + "\"");
}
else
{
Debug.WriteLine("Found Window \"" + window + "\" but not its button \"" + button + "\"");
}
}
}
catch (Exception ex)
{
Trace.TraceError(ex.ToString());
}
return found;
}
window
是该窗口的标题(= “脱机工作”)和button
按钮的标题(= “& Try Again” )。
注意:不要忘记字幕字母前面的&符号(“&”)。