2013-01-18 105 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

相關問題