使用Process.StartInfo.Verb =“print”命令打印多个图像

时间:2015-07-16 15:17:58

标签: c# windows image printing

我正在使用此代码打印带有Windows打印图片...

string fileName = @"C:\Images\12.jpg";
var p = new Process();
p.StartInfo.FileName = fileName;
p.StartInfo.Verb = "Print";
p.Start();

我想从目录打开多个图像到这个,我该怎么办?

我尝试了这段代码,但无效:

var p = new Process();
DirectoryInfo d = new DirectoryInfo(@"Directory address");
FileInfo[] Files = d.GetFiles("*.jpg");
foreach (FileInfo file in Files)
{
    p.StartInfo.FileName += file.FullName.ToList();
    p.StartInfo.Verb = "Print";
    p.Start();
}

1 个答案:

答案 0 :(得分:2)

从您的代码示例中,您似乎只想调用单独的" print"每个文件的动词命令。如果是这样,那么你应该能够通过简单地在循环中分配文件名来实现它,而不是枚举文件名的字符并将其附加到FileName属性:

DirectoryInfo d = new DirectoryInfo(@"Directory address");
FileInfo[] Files = d.GetFiles("*.jpg");
ProcessStartInfo psi = new ProcessStartInfo();

psi.Verb = "Print";
foreach (FileInfo file in Files)
{
    psi.FileName = file.FullName;
    Process.Start(psi);
}

请注意,您无法为此目的重复使用单个Process对象。一旦启动了给定的Process对象,就无法再次启动它。但是你可以重用一个ProcessStartInfo对象,在循环的每次迭代中开始一个新进程。

修改

来自你的评论:

  

我不想简单地调用单独的" print"每个文件的动词命令...我想将所有文件添加到一个" print"动词命令

使用Process类无法做到这一点。根据定义,DDE" print"动词(即"命令")只处理单个文档。如果您愿意做很多额外的工作,您可以编写自己的DDE客户端,尝试使用DDEEXEC与知道如何打印图像文件的DDE服务器进行迭代交互。但是a)这个更多的工作,并且b)只有当你碰巧安装了一个程序来处理通过DDEEXEC打印图像文件时才会工作(Windows内置支持打印)图像没有。)

我建议你坚持以上。

(并且为了将来参考,如果你只想调用Process.Start()一次,把它放在一个循环中绝对不是要走的路。如果你的示例代码在任何相似之处你的问题会更清楚所有你真正想要做的事情。:))