【问题标题】:ShellExecute, "Print"ShellExecute,“打印”
【发布时间】:2013-05-17 08:39:37
【问题描述】:

我正在通过 C 使用 ShellExecute,除了一个问题之外,这似乎工作正常。

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

有了这个我想得到打印对话框,按 OK 开始打印,而不是打开 MS Word 并加载文件 C:\index.html。

如何使用 ShellExecute 获得 html 文件的打印功能?

如果需要注意,IE 不是我的默认互联网浏览器。

【问题讨论】:

    标签: winapi


    【解决方案1】:

    您依赖 shell 的关联来打印文件,但这是一种非常脆弱的方法。如果您右键单击该文件并选择 Print,您将观察到与调用 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);似乎根本不起作用。
    • 您需要替换实际的系统目录,因为ShellExecute 不会为您扩展路径。而且似乎需要引用文件名。所以,这会起作用:ShellExecute(0, NULL, "rundll32.exe", "C:\\windows\\system32\\mshtml.dll,PrintHTML \"C:\\index.html\"", NULL, SW_NORMAL);
    • 谢谢大卫,效果很好,正如预期的那样! sprintf(sfile, "%s%s%s%s", "mshtml.dll,PrintHTML \"", cwd, afile, "\""); ShellExecute(NULL, "open", "rundll32.exe", sfile, NULL, SW_SHOWNORMAL);
    • 这里有机会在屏幕中心弹出对话框吗?
    • 嗯,不容易。您需要做的是安装一个 CBT_HOOK,并使用它来检测对话框即将显示。然后你可以重新定位它。
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多