如何使用 ShellExecuteExW 打印 .html 文件?
How to print .html files using ShellExecuteExW?
目标是通过 Windows-API ::ShellExecuteExW
.
打印一个 htm/html 文件
::ShellExecuteExW
的参数为
shell_info.lpVerb = "open";
shell_info.lpFile = "C:\Windows\System32\rundll32.exe";
shell_info.lpParameters = "C:\Windows\System32\mshtml.dll ,PrintHTML "C:\Temp\test.html"";
lpFile
和 lpParameters
从注册表项 "\HKEY_CLASSES_ROOT\htmlfile\shell\print\command"
中获取
错误信息:
如果通过 cmd 运行 C:\Windows\system32\rundll32.exe C:\Windows\system32\mshtml.dll ,PrintHTML "C:\Temp\test.html"
一切正常。出现打印对话框。
如何调用 ::ShellExecuteExW
来实现与 cmd 相同的行为?
屏幕截图中产生错误的代码可能与您在此处向我们展示的代码不同吗?我问这个是因为你似乎没有逃避任何双引号或反斜杠。在我看来,您的编译器在编译该代码时至少应该给出一个错误。
但是我刚刚尝试了下面的代码,这似乎有效。希望对你有帮助。
int main()
{
SHELLEXECUTEINFOW shell_info = { 0 };
shell_info.cbSize = sizeof(SHELLEXECUTEINFOW);
shell_info.lpVerb = L"open";
shell_info.lpFile = L"C:\Windows\System32\rundll32.exe";
shell_info.lpParameters = L"C:\Windows\System32\mshtml.dll ,PrintHTML \"C:\Temp\test.html\"";
shell_info.nShow = SW_SHOWNORMAL;
ShellExecuteExW(&shell_info);
return 0;
}
目标是通过 Windows-API ::ShellExecuteExW
.
::ShellExecuteExW
的参数为
shell_info.lpVerb = "open";
shell_info.lpFile = "C:\Windows\System32\rundll32.exe";
shell_info.lpParameters = "C:\Windows\System32\mshtml.dll ,PrintHTML "C:\Temp\test.html"";
lpFile
和 lpParameters
从注册表项 "\HKEY_CLASSES_ROOT\htmlfile\shell\print\command"
错误信息:
如果通过 cmd 运行 C:\Windows\system32\rundll32.exe C:\Windows\system32\mshtml.dll ,PrintHTML "C:\Temp\test.html"
一切正常。出现打印对话框。
如何调用 ::ShellExecuteExW
来实现与 cmd 相同的行为?
屏幕截图中产生错误的代码可能与您在此处向我们展示的代码不同吗?我问这个是因为你似乎没有逃避任何双引号或反斜杠。在我看来,您的编译器在编译该代码时至少应该给出一个错误。
但是我刚刚尝试了下面的代码,这似乎有效。希望对你有帮助。
int main()
{
SHELLEXECUTEINFOW shell_info = { 0 };
shell_info.cbSize = sizeof(SHELLEXECUTEINFOW);
shell_info.lpVerb = L"open";
shell_info.lpFile = L"C:\Windows\System32\rundll32.exe";
shell_info.lpParameters = L"C:\Windows\System32\mshtml.dll ,PrintHTML \"C:\Temp\test.html\"";
shell_info.nShow = SW_SHOWNORMAL;
ShellExecuteExW(&shell_info);
return 0;
}