2013-01-18 102 views
0

我想实现的是使用多字代码打印到特定的打印机。 那种方式使用使用MS Office Word打印到特定的打印机(多线程,无默认打印机使用)

Word.Application.ActivePrinter = "printer name"; 

它改变了Windows上的默认打印机,并用它当我打印。 在多线程环境中,其他线程可以在其活动打印机的单词对象上进行更改,并且它将在所有单词上进行更改。活动打印机,因为它们被“绑定”到默认打印机。 现在我已经在活动引导器和打印输出()方法上使用了lock()。但方法太慢,整个更换主动打印机需要相当长的时间。并锁定它使整个程序变慢。

所以我问,有没有一种方法可以打印到指定的打印机,而无需使用/更改默认打印机,如果是的话,我应该在哪里看,我在哪里可以找到它?

亲切的问候

编辑: 发现这一点:

http://support.microsoft.com/kb/216026

我的解决办法:

object wordBasic = word.WordBasic; 
wordBasic.GetType().InvokeMember("FilePrintSetup", 
    System.Reflection.BindingFlags.InvokeMethod, 
    null, 
    wordBasic, 
    new object[] {PrinterName,true }, 
    null, 
    null, 
    new string[] {"Printer", "DoNotSetAsSysDefault" }); 

有了这个,我可以一次打印多个文档。

+0

我不认为它支持运行Word的多个实例,或者试图多线程它。 – ZippyV

+0

我在自己的实例中运行每个单词,并且除了活动打印机之外它还能正常工作,发现我可以使用wordbasic,我似乎无法在我的机器上工作 –

回答

0

解决方案:

object wordBasic = word.WordBasic; 
wordBasic.GetType().InvokeMember("FilePrintSetup", 
    System.Reflection.BindingFlags.InvokeMethod, 
    null, 
    wordBasic, 
    new object[] {PrinterName,true }, 
    null, 
    null, 
    new string[] {"Printer", "DoNotSetAsSysDefault" }); 

发现在:http://support.microsoft.com/kb/216026

相关问题