启动隐藏的 Internet Explorer
Start hidden Internet Explorer
我的公司正在使用 Sharepoint 和 ADFS。然而,对于 WebDav 的使用,我们需要用户获得一些令牌,他们只能通过打开 Internet Explorer 并导航到两个站点来获得这些令牌。然而,他们每 ~30 分钟就会丢失一次令牌,因此它必须是一项重复性任务。
所以现在我的工作是:
- 用 IE 打开 2 个网站
- 每 30 分钟
- 不要惹恼用户
我目前的解决方案 "kinda" 有效,但我对此并不十分满意。
我只有 VSExpress,所以没有服务。
我有一个 maximumed max opacity visible false Windows 表单。
我有一个 GPO,它将一个 EXE 文件复制到计算机,然后创建一个定时作业,在登录后每 30 分钟启动一次。然而,它并没有真正解决问题,如果不手动 运行 EXE,人们仍然无法访问 webdav。此外,每当 EXE 运行 连接当前应用程序时,用户正在使用的应用程序就会失去焦点,这在您输入内容并且必须单击返回时有点烦人。
我当前的代码如下所示:
private void Form1_Load(object sender, EventArgs e)
{
MainMethod();
}
private void MainMethod()
{
RegistryKey root = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\InternetExplorer.ApplicationMedium\CLSID", false);
if (root!=null)
{
opensite();
Application.Exit();
}
}
private void opensite()
{
try
{
SHDocVw.InternetExplorer _ie1 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
SHDocVw.InternetExplorer _ie2 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
_ie1.Visible = false;
_ie2.Visible = false;
_ie1.Navigate("SITENAME1.html");
_ie2.Navigate("SITENAME2.html");
System.Threading.Thread.Sleep(10000);
_ie1.Quit();
_ie2.Quit();
}
catch(Exception e)
{
}
}
不过,我觉得有一种更优雅的方法可以做到这一点。我听说打开隐藏 IE 的唯一方法是通过
(SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
但是我依赖于并非所有客户端都有的注册表项。
你能帮我以可靠的方式打开 IE 吗?也许有一些关于我应该如何将重复任务设置为每 30 分钟开始一次的提示(因为我认为它在 atm 上做得不正确)。
提前谢谢大家。
编辑:
感谢https://whosebug.com/users/5065008/daniel-waghorn
我现在将 opensite 位替换为:
private void Form1_Load(object sender, EventArgs e)
{
MainMethod();
}
private void MainMethod()
{
openProc("SITE1.html");
openProc("SITE2.html");
Application.Exit();
}
private void openProc(string site)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
string ProgramFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
startInfo.FileName = ProgramFiles + @"\Internet Explorer\iexplore.exe";
startInfo.Arguments = "" + site + "";
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo);
}
再次感谢!
我想您会在以下链接之一中找到答案:
Handle IE To filling a form c#
Opening a Hidden Internet Explorer Window without it getting Focus?
您可以使用 ProcessStartInfo
创建一个新的 IE 实例:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = ""C:\Program Files\Internet Explorer\iexplore.exe"";
startInfo.Arguments = "" + url + "";
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo);
如果您不想对其进行硬编码,您可以使用 Environment.SpecialFolder.ProgramFiles
获取用户的 Program Files 目录路径。
我必须指出 startInfo.WindowStyle
将隐藏启动 Internet Explorer,尽管 IE 在任何时候决定出于任何可能显示的原因更改该值。
理想情况下,如果您不依赖于使用 Internet Explorer 获取令牌,另一种替代方法是使用上述代码,但目标是 cURL 或类似的东西。有了这个,它会在命令行中 运行,你可以保证不会显示或窃取 startInfo.CreateNoWindow
的焦点。
我的公司正在使用 Sharepoint 和 ADFS。然而,对于 WebDav 的使用,我们需要用户获得一些令牌,他们只能通过打开 Internet Explorer 并导航到两个站点来获得这些令牌。然而,他们每 ~30 分钟就会丢失一次令牌,因此它必须是一项重复性任务。
所以现在我的工作是:
- 用 IE 打开 2 个网站
- 每 30 分钟
- 不要惹恼用户
我目前的解决方案 "kinda" 有效,但我对此并不十分满意。 我只有 VSExpress,所以没有服务。
我有一个 maximumed max opacity visible false Windows 表单。 我有一个 GPO,它将一个 EXE 文件复制到计算机,然后创建一个定时作业,在登录后每 30 分钟启动一次。然而,它并没有真正解决问题,如果不手动 运行 EXE,人们仍然无法访问 webdav。此外,每当 EXE 运行 连接当前应用程序时,用户正在使用的应用程序就会失去焦点,这在您输入内容并且必须单击返回时有点烦人。 我当前的代码如下所示:
private void Form1_Load(object sender, EventArgs e)
{
MainMethod();
}
private void MainMethod()
{
RegistryKey root = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\InternetExplorer.ApplicationMedium\CLSID", false);
if (root!=null)
{
opensite();
Application.Exit();
}
}
private void opensite()
{
try
{
SHDocVw.InternetExplorer _ie1 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
SHDocVw.InternetExplorer _ie2 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
_ie1.Visible = false;
_ie2.Visible = false;
_ie1.Navigate("SITENAME1.html");
_ie2.Navigate("SITENAME2.html");
System.Threading.Thread.Sleep(10000);
_ie1.Quit();
_ie2.Quit();
}
catch(Exception e)
{
}
}
不过,我觉得有一种更优雅的方法可以做到这一点。我听说打开隐藏 IE 的唯一方法是通过
(SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
但是我依赖于并非所有客户端都有的注册表项。
你能帮我以可靠的方式打开 IE 吗?也许有一些关于我应该如何将重复任务设置为每 30 分钟开始一次的提示(因为我认为它在 atm 上做得不正确)。
提前谢谢大家。
编辑:
感谢https://whosebug.com/users/5065008/daniel-waghorn 我现在将 opensite 位替换为:
private void Form1_Load(object sender, EventArgs e)
{
MainMethod();
}
private void MainMethod()
{
openProc("SITE1.html");
openProc("SITE2.html");
Application.Exit();
}
private void openProc(string site)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
string ProgramFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
startInfo.FileName = ProgramFiles + @"\Internet Explorer\iexplore.exe";
startInfo.Arguments = "" + site + "";
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo);
}
再次感谢!
我想您会在以下链接之一中找到答案:
Handle IE To filling a form c#
Opening a Hidden Internet Explorer Window without it getting Focus?
您可以使用 ProcessStartInfo
创建一个新的 IE 实例:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = ""C:\Program Files\Internet Explorer\iexplore.exe"";
startInfo.Arguments = "" + url + "";
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo);
如果您不想对其进行硬编码,您可以使用 Environment.SpecialFolder.ProgramFiles
获取用户的 Program Files 目录路径。
我必须指出 startInfo.WindowStyle
将隐藏启动 Internet Explorer,尽管 IE 在任何时候决定出于任何可能显示的原因更改该值。
理想情况下,如果您不依赖于使用 Internet Explorer 获取令牌,另一种替代方法是使用上述代码,但目标是 cURL 或类似的东西。有了这个,它会在命令行中 运行,你可以保证不会显示或窃取 startInfo.CreateNoWindow
的焦点。