■89586 / inTopicNo.4) |
Re[3]: C#によるプリンタ制御 |
□投稿者/ 魔界の仮面弁士 (1973回)-(2018/12/06(Thu) 14:54:22)
|
2018/12/06(Thu) 15:09:35 編集(投稿者)
■No89584 (S.Kos さん) に返信 > こんな手があるとは! 別案として、 rundll32 printui.dll,PrintUIEntry を /Sr 指定で呼び出す手もありそうですが、 一部の設定のみを切り替えるような目的には向かないですね。
> ゴリゴリ(笑)のCによるアプリケーションで、DEVMODE構造体を取得して書き戻したことがあります。
DEVMODE 構造体を得る手段としては、 PageSettings.CopyToHdevmode メソッドや PritereSettings.GetHdevmode メソッドがありますね。 そこから先は API になるかもしれませんけど。
これ自体は SetHDevmode メソッドでの利用を想定したものかも知れませんが、 一応その値を元に、StandardPrintController クラスが内部で ResetDC API に引き渡しているようです。 https://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Printing/DefaultPrintController.cs%2c90
> C#だと、Win32APIレベル ResetDC() のような書き戻し、はできないのですか?
// using System.Printing; var setting = Duplexing.TwoSidedLongEdge;
// var sv = new PrintServer(PrintSystemDesiredAccess.AdministrateServer); var sv = new LocalPrintServer(PrintSystemDesiredAccess.AdministrateServer); var pq = new PrintQueue(sv, printerName, PrintSystemDesiredAccess.AdministratePrinter); var pc = pq.GetPrintCapabilities(); var dc = pc.DuplexingCapability; if (dc.Contains(setting)) { pq.DefaultPrintTicket.Duplexing = setting; pq.Commit(); }
|
|