gpt4 book ai didi

c# - 如何使用 C# 以编程方式将 html 字符串直接传递给 Web 浏览器?

转载 作者:行者123 更新时间:2023-11-30 17:09:47 24 4
gpt4 key购买 nike

好吧,例如我有一些简单的控制台应用程序。我的目的是生成一些报告并在某些外部应用程序(例如记事本或网络浏览器)中将其呈现给用户。

class Program
{
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);

static void Main()
{
OpenNotepadAndInputTextInIt("Message in notepad");
OpenHtmlFileInBrowser(@"c:\temp\test.html");
}

private static string GetDefaultBrowserPath()
{
string key = @"HTTP\shell\open\command";
using(RegistryKey registrykey = Registry.ClassesRoot.OpenSubKey(key, false))
{
return ((string)registrykey.GetValue(null, null)).Split('"')[1];
}
}

private static void OpenHtmlFileInBrowser(string localHtmlFilePathOnMyPc)
{
Process browser = Process.Start(new ProcessStartInfo(GetDefaultBrowserPath(), string.Format("file:///{0}", localHtmlFilePathOnMyPc)));
browser.WaitForInputIdle();

}

private static void OpenNotepadAndInputTextInIt(string textToInputInNotepad)
{
Process notepad = Process.Start(new ProcessStartInfo("notepad.exe"));
notepad.WaitForInputIdle();
if(notepad != null)
{
IntPtr child = FindWindowEx(notepad.MainWindowHandle, new IntPtr(0), "Edit", null);
SendMessage(child, 0x000C, 0, textToInputInNotepad);
}
}
}

这个解决方案工作正常,但如您所见,我有两种方法; GetDefaultBrowserPath()GetDefaultBrowserPath(string localHtmlFilePathInMyPc)。第一个将消息字符串直接传递到记事本窗口,但第二个需要创建一个文件,一些 html 页面,然后将此 html 文件作为参数传递给网络浏览器。这是一种缓慢的解决方案。 我想生成一个 html 字符串报告并将其直接传递给网络浏览器,而不创建中间 html 文件。

最佳答案

如果你想在系统的默认浏览器应用程序中打开一个外部浏览器窗口(而不是将一个集成到你的应用程序中),我认为唯一的方法是通过 data URI。 :

data:text/html,<html><title>Hello</title><p>This%20is%20a%20test

将此作为 URI 传递到浏览器中。但是,我真的不建议这样做。这对用户来说是意想不到的,生成一个要显示的临时文件并没有什么坏处,是吗?此外,您可能很快就会开始遇到 URI 长度限制。

顺便说一句,您当前在浏览器中打开文件的方式比要求的要复杂得多。 Shell 执行自己做正确的事情,无需手动从注册表中检索浏览器的路径:

Process.Start("file:///the/path/here")

关于c# - 如何使用 C# 以编程方式将 html 字符串直接传递给 Web 浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com