2009-10-08 101 views
5

我希望(以编程方式)打印各种类型的文档,通过要求Windows执行此操作(使用默认的关联应用程序)。我该怎么做(在.NET或C++/Win32 API中)?如何让Windows打印文档?

例如,如果我在机器上安装了MS Office和Acrobat Reader,PDF文件应该由Acrobat Reader打印,DOC文件应该由MS Word打印。但是,如果我没有安装MS Office,应使用Wordpad或OpenOffice.org Writer打印DOC文件(如果安装了后者),或者任何应用程序当前都是该类型文件的默认关联。

回答

6

尝试使用ShellExecute函数。

例如,在C:

ShellExecute(my_window_handle, "print", path_to_file, NULL, NULL, SW_SHOW); 
+0

谢谢你的例子。 – 2009-10-08 13:47:35

5

致电ShellExecute。使用“print”作为lpOperation参数。

+2

并非所有的文件可以打印这种方式。声明是,它通常适用于在Windows资源管理器中具有“打印”上下文菜单的文件。在我的系统中,不包括HTML和DOC - 我没有MS Office,但是我有Open Office *和* MS Word Reader。尽管如此,它还是可以做得很好,而不是通过发送虚假键盘和鼠标消息来编写“脚本”应用程序。 – Steve314 2009-10-08 13:47:21

+0

谢谢您的信息。 – 2009-10-08 13:49:17

+1

Steve,如果Open Office和Word Reader没有注册自己能够处理“打印”动词,那么这就是*这些程序的缺点。我们不能期望编写特定于应用程序的方式来打印文档,特别是像HTML或Word这样复杂的格式。 – 2009-10-08 14:41:44

4

这里是C#的一些代码:

public void ShellExecute(string filename, string verb) 
    { 
     System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo(); 
     si.UseShellExecute = true; 
     si.FileName = filename; 
     si.Verb = verb; 
     System.Diagnostics.Process.Start(si); 
    } 
+0

感谢您使用C#示例。 – 2009-10-08 14:32:53