Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows上显示隐藏进程?_C#_Process_Window_Hidden_Show - Fatal编程技术网

C# 在Windows上显示隐藏进程?

C# 在Windows上显示隐藏进程?,c#,process,window,hidden,show,C#,Process,Window,Hidden,Show,我有点问题 与我之前的问题相关,我们得出结论,有一个Internet Explorer进程正在启动,指示从本地磁盘加载一个简单的.html文件,其中包含javascript,这将打开一个更大的聊天/会议系统的其余部分。Internet Explorer是从Lotus Notes客户端启动的 不幸的是,我们所能看到的只是任务管理器中弹出的IExplore.exe进程,几秒钟后又消失了 如果我们试图打开我们在磁盘上找到的local.html文件,它会给我们顶部的信息栏,告诉我们它已经禁用了活动内容。

我有点问题

与我之前的问题相关,我们得出结论,有一个Internet Explorer进程正在启动,指示从本地磁盘加载一个简单的.html文件,其中包含javascript,这将打开一个更大的聊天/会议系统的其余部分。Internet Explorer是从Lotus Notes客户端启动的

不幸的是,我们所能看到的只是任务管理器中弹出的IExplore.exe进程,几秒钟后又消失了

如果我们试图打开我们在磁盘上找到的local.html文件,它会给我们顶部的信息栏,告诉我们它已经禁用了活动内容。然而,这并不是真正的问题。我们有另一台机器,它有相同的设置,但一切正常,手动加载.html文件也会出现同样的错误

但是,当从notes启动IExplore时,可能会显示另一条错误消息,但由于此过程应该只是启动系统的其余部分,并且此窗口是隐藏的,因此我们无法看到它,即错误消息/问题

所以,我想,也许我应该尝试创建一个小程序,等待IExplore.exe启动,然后立即显示窗口,这样我们就可以看到错误消息,或者任何问题。至少,希望我们能看到这一点

到目前为止还不错,只是如果我从自己的程序启动一个进程,带有一个隐藏窗口,主窗口句柄是0,因此我根本无法显示窗口。我认为这个从Lotus Notes启动的IExplore.exe进程也会有同样的问题

我的监控程序是用C#编写的,基本上运行这个循环:

foreach (var process in Process.GetProcesses())
{
    if (process.ProcessName.ToLower() == "iexplore")
        result.Add(process);
}
这将拾取所有IExplore.exe进程,无论是否为windows,使用IE8,第一个窗口将获得2个进程,正如预期的那样。我一遍又一遍地运行它,并处理与以前运行的差异

但是,该进程在开始时有一个窗口句柄0,因此我将其更改为:

foreach (var process in Process.GetProcesses())
{
    if (process.ProcessName.ToLower() == "iexplore" &&
        process.MainWindowHandle != IntPtr.Zero)
    {
        result.Add(process);
    }
}
但现在,即使在窗口获得句柄之后,它也不会拾取任何内容(是的,process.MainWindowHandle在显示窗口后确实有一个非零句柄值,但在从未显示窗口的情况下,它保持为0。)

所以,问题是:当这个隐藏的IExplore.exe进程还没有窗口句柄时,有没有办法让它显示出来?我对此表示怀疑,但也许有人能证明我错了


如果没有,我的备份计划是创建一个shim IExplore.exe程序,该程序将所有命令行参数转发到原始参数,但它指定要显示窗口。这是一个解决方案吗?

我认为没有任何方法可以强制没有窗口句柄的IE窗口为自己分配窗口句柄(或使用以前分配的窗口句柄)并显示自己


至于你的备份方法:我认为这是可行的,但你在那里的危险区域工作。实际上,我建议您编写垫片,只记录iexplore.exe的每次调用以及其中的所有内容,并使用这些内容来描述您的问题;只有在彻底描述了完全良性日志记录的问题之后,我才建议可能修改参数以强制iexplore.exe显示窗口。

这完全是一个调试工具,这样糟糕的解决方案不可能投入生产,所以现在我们只需要使用垫片选项,看看这是否有帮助。