ShellExecute, "打印"

4

我正在通过C使用ShellExecute,看起来一切都很正常,除了一个问题。

ShellExecute(NULL, "print", "C:\\index.html", NULL, NULL, SW_HIDE);

我想获取打印对话框来开始打印,但是 MS Word 打开了文件 C:\index.html,该怎么办?如何使用 ShellExecute 在 HTML 文件上实现打印功能?需要注意的是,IE 不是我的默认浏览器。
1个回答

7
你现在依靠shell的关联来打印文件,但这是一种非常脆弱的方法。如果你右键单击文件并选择“打印”,你会观察到与调用ShellExecute相同的行为。
因此,如果你想使用ShellExecutePrint动词,你需要更改计算机的配置。你需要确保计算机的关联已经配置好了以适合你的方式处理.html文件上的Print动词。你可以为自己的计算机做到这一点,但不能指望为其他人的计算机做到这一点。
相反,你可以运行以下命令,以确保HTML文件将被打印:
rundll32.exe %windir%\system32\mshtml.dll,PrintHTML "C:\index.html"

您可以将其轻松地转换为 ShellExecute 调用。

听起来很不错。请帮忙翻译成ShellExecute。我的方法:ShellExecute(NULL, "open", "rundll32.exe %windir%\system32\mshtml.dll,PrintHTML", myfile, NULL, SW_NORMAL); 似乎根本不起作用。 - Wine Too
你需要替换实际的系统目录,因为ShellExecute不会为你扩展路径。而且似乎文件名需要加引号。所以,这样做就可以了:ShellExecute(0, NULL, "rundll32.exe", "C:\\windows\\system32\\mshtml.dll,PrintHTML \"C:\\index.html\"", NULL, SW_NORMAL); - David Heffernan
有没有可能在屏幕中央弹出对话框? - Wine Too
我注意到使用这种方法渲染HTML时,CSS的解释与直接使用Internet Explorer(相同的html/css文件)不同。这个mshtml dll是与IE版本一起维护和同步更新的吗?还是它是一个不同的库? - wirrbel
@wirrbel 这将是同一个库,但它将在遗留兼容模式下运行。我猜你需要通过注册表设置和文档类型选择现代渲染。 - David Heffernan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接