我正在处理一个需要在 Internet Explorer 信息亭模式窗口中显示 Flash 项目的项目。此外,Flash 使用套接字与我的 C# 应用程序进行通信,以完成 Flash 自身无法执行的各种任务。其中一项任务是打开 PDF 并将其置于前台。由于 Flash 安全性,Flash 无法直接打开 PDF,这迫使您选择网络或本地模式,而网络是该项目的唯一选择。
我遇到的问题是在使用 IE 8 的 Windows XP 上,kiosk 模式似乎与 Shell32 命令冲突,以最小化 Internet Explorer 和/或将 PDF 置于前台。我已经设法让它在 Windows 7 中工作(无法测试 Vista),但我尝试的任何东西似乎都无法在 Windows XP 中始终如一地工作。
我使用 C# 进程启动窗口,如下所示:
explorerProcess = new Process();
explorerProcess.StartInfo = new ProcessStartInfo("IEXPLORE.EXE", "-k file:\\\\" + path);
explorerProcess.Start();
Explorer 现在已打开并处于信息亭模式。接下来我打开PDF。
pdfProcess = new Process();
pdfProcess.StartInfo = new ProcessStartInfo(fileName);
pdfProcess.Start();
最后,使用 Shell32.dll 命令 ShowWindow 我在 PDF 上调用最大化,迫使用户注意它。
ShowWindow(pdfProcess.Handle, SW_MAXIMIZE);
在 Windows 7 中,我现在将 PDF 最大化,并且信息亭模式 Internet Explorer 窗口位于 PDF 后面。这样,当 PDF 关闭时,用户将返回到信息亭模式窗口。在 Windows XP 中,PDF 在后台打开,似乎没有多少 ShowWindow 调用将它带到资源管理器实例的前面。我尝试最小化资源管理器实例,并尝试在 IE 和 PDF 上执行其他 Windows 事件,例如显示/隐藏/恢复,以尝试将 XP 哄骗到我想要的内容中,但没有成功。我不确定这是否真的是 XP 的错,或者它是否是 Windows 7(对我而言)在 XP 上有 IE9 和 IE8 的错。
还有其他人遇到过这种情况,或者知道有什么办法可以欺骗 XP 将 PDF 带到前台吗?