我想向用户展示一个全屏“演示文稿”(这是一个本地 HTML 文件),假设他们的主要浏览器是 Chrome。
实际上这个问题 - 几乎完全符合标题,除了一个条件:如果浏览器已经在运行,我想在其中打开一个新选项卡并以某种方式将其转移到全屏。
通常我想做的是这样做:
第一种方式。男人用手按键盘上的 F11。由于显而易见的原因,这种方法不适合我。
第二种方式 -此问题答案中的建议有效,前提是计算机上没有运行 chrome。也就是说,一个新的浏览器实例将在全屏中打开。如果浏览器已经在运行 - 你会得到 zilch。也就是说,没有过渡到全屏。它只会打开另一个选项卡。
通常,在讨论的这一点上,建议有两种方式:
杀死所有浏览器实例,并以全屏模式重新启动一个窗口。有两件事会干扰这一点:
首先,用户可能在选项卡中打开了一些重要的东西。关闭它们有点麻烦。
其次,Chrome 可以首先开始选择需要工作的配置文件。也就是说,人们会看到这样的东西,而不是漂亮的演示文稿:
一般来说,“先杀死,然后重新创建”的方式非常糟糕。
“胡说八道!” - 说知道如何使用 SendMessage 向窗口发送消息的人 - “只需找到所需窗口的 ID,然后发送它F11!”。
简单……但不是很简单。
在这里,我坐在电脑前。我在 chrome 中打开了几个选项卡,chrome 进程本身在大约 25 个实例中运行。这不是我的恶意 - Chrome 本身就是这样做的。
如果我想向新打开的 chrome 发送“按键”-我需要“启动它,然后向它询问 MainWindowHandle”。
通常这个建议后面会跟着一个这样的代码示例
Process p = Process.GetProcessesByName("notepad").FirstOrDefault(); if (p != null) { IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); }并始终以记事本为例。
它适用于笔记本电脑。
使用 Chrome - 总是作为调用的结果
p.MainWindowHandle,出现异常“进程已退出,因此请求的信息不可用。”。如果您想检查这一点,请尝试在按钮单击上放置类似的内容:
(我建议您在 WinForms 中运行它 - 为 .NET Framework 4.8 构建的应用程序 - 为什么在 NET Core 中调用 Process.Start (),使用不是可执行名称的参数调用,会立即导致异常)
string index = Path.Combine(@"C:\Temp", "index.html"); Process bProc = Process.Start(index); // pause 0.2 sec Thread.Sleep(2000); // send key F11 to process if (bProc != null) { try { while (bProc.MainWindowHandle == IntPtr.Zero) { Thread.Sleep(10); bProc.Refresh(); } var handle = bProc.MainWindowHandle; // удача! Есть искомый hadle! // собственно, посылка F11 по известному handle SetForegroundWindow(h); SendKeys.SendWait("k"); } catch (Exception ex) { MessageBox.Show(ex.Message); // The process has probably exited, // so accessing MainWindowHandle threw an exception } }并且
удача在这个代码片段中永远不会发生。
一般来说,任务不是很简单。而且我已经尝试了所有或多或少浮在表面上的方法。
你能告诉我怎么做吗?

启动浏览器时,可以指定用于存储配置文件的文件夹。如果它与浏览器已经打开的那个不匹配,那么将保留一个新实例。
也就是说,我建议在信息亭模式下运行具有干净配置文件的浏览器。
中指定的文件夹
--user-data-dir=C:\Temp\Supertemp\smth可以是任何东西:空的甚至根本不存在(chrome会自己创建,主要是有写权限)。但是一定不要忘记退出浏览器后自己清理一下,否则会在磁盘上堆积垃圾。好吧,或者您可以专门为您的应用程序拥有自己的永久 chrome 配置文件文件夹,但不能在它旁边,因为 chrome 需要对其的写入权限。
至于 flag
--kiosk,如果要允许用户退出全屏模式,则需要将其删除。