5

特定のプリンターのデフォルトで選択された印刷トレイを変更できる必要があります。これを行うための VC++/win32 コードを持っている人はいますか?

問題が発生した場合は、プリンターのデフォルト設定を変更する必要があると思います。当社の印刷ジョブは当社以外のアプリケーションによって実行されるため、当社のアプリケーション内から発生する印刷操作のコンテキストでこのような変更を行うことはできません。別のアプリケーションでデフォルトの印刷設​​定を変更する方法がない限り、プリンターのユーザーのデフォルトを変更し、印刷ジョブを開始してから、デフォルトを元の値に戻すという作業に行き詰まっていると思います。

現在のユーザーに対してのみデフォルトを変更し、特別な UAC 昇格などを必要としないことを本当に望んでいます...

この MSDN 記事に示されているものと同様のものを使用し、DEVMODE 構造体 (dmDefaultSource または dmFormName、またはその両方) にフィールドを設定する必要があると思われます。

テイカーはいますか?または、誰かが共有したい落とし穴がありますか?

編集: DEVMODE ドキュメントDEVMODE ドキュメントへのリンクは次のとおりです。

編集:特定のプリンターに固有のものではなく、一般的な解決策を探していることも指摘しておく必要があります(非常に多くの環境に展開しています)

4

5 に答える 5

2

参考までに - 最終的に使用した解決策は、DEVMODE 構造をキャプチャすることでした。プリンター設定ダイアログを表示する小さな win32 アプリがあります ( fMode を DM_IN_PROMPT に設定したDocumentProperties経由)。結果の DEVMODE はディスクに保存されます。印刷を行うときは、現在の DEVMODE をキャプチャし、保存されている DEVMODE を設定し、印刷を開始してから、元の DEVMODE を復元します。

これは実際には非常にうまく機能します。場合によっては、印刷ドライバーが更新され、保存されている DEVMODE が破損することがありますが、これはそれほど頻繁には発生せず、ユーザーが修正するのは簡単です。

追加のボーナスとして、このアプローチにより、(出力トレイだけでなく) すべてのプリンター設定をキャプチャできるため、ステープル、丁合いなどの高度な設定をサポートすることができました...

ヒント: これを試す場合は、必ずバイナリ出力ストリームとしてディスクに書き込んでください。このアプローチの最初の評価で、誤って出力ストリームをテキスト出力ストリームとして設定しました。多くの場合は問題なく動作しますが、一部のプリンター (DEVMODE プライベート データで上位バイトを使用するプリンター) では突然機能しなくなります。ばかげていますが、簡単に犯す間違いであり、非常に優れた解決策をしばらく検討していなかったものです。

于 2012-05-29T03:25:02.830 に答える
1

このような機能の設定は、特にドライバが Microsoft の印刷ガイドラインに従っていない場合は難しい場合があります。そうは言っても、System.Drawing.Printing.PrinterSettings である程度の成功を収めています。PaperSource を設定できますが、デフォルトを設定できるかどうかはわかりません。

この例をまだ見ていない場合は、さらに詳しく調べてください。プリンター設定を保存および再ロードする方法について説明します。私の担当者の 1 人がそれを指摘してくれました: PrinterSettings - プリンター設定の変更、保存、および読み込み

機能する可能性はあるが機能しない可能性がある別の方法は、必要なセットアップをいくつか決定することです。これらの各設定 (つまり、トレイ 1、トレイ 2) でプリンタをインストールします。次に、印刷時にデフォルトのプリンターを切り替えるだけです。あなたが探しているものではありませんが、役立つかもしれません。

このような状況で私たちが通常行うことは、監視しているフォルダーにサードパーティのアプリにデータを書き込んでもらい、ファイルを取得して Postscript または PCL を自分で解析し、用紙トレイを変更してから宛先デバイスに送信することです。聞こえるかもしれませんが、はるかに簡単です。

于 2008-10-07T13:58:13.047 に答える
1

dmDefaultSource はトレイを制御します。残念ながら、これに設定する値はドライバーによって異なります。これはビン番号であり、プリンターに印刷されたトレイ番号と必ずしも同じではないためです。

次のリンクは、プリンターのトレイ/ビンの割り当てに関する情報を収集するための VB6 コードを提供します。その情報を使用して、プログラムで dmDefaultSource をトレイの適切なビン # に割り当てることができます。基本的に、DeviceCapabilities を使用してプリンターに関する情報を返し、文字列 (「トレイ 1」など) を検索して関連するビン番号を取得する必要があります。

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

于 2009-01-26T19:20:36.503 に答える
0

最近、特定のプリンタードライバーで非常によく似た処理を行う必要があり、ベンダー固有のSDKが必要でした。トレイはDEVMODEまたは他のPRINTINFO_*構造のいずれにも表示されないようです。そのため、プリンターベンダーに電子メールを送信すると思います。

最後の手段として、2つの可能なハッキングを考えることができます。1つは、 AutoITなどのスクリプトツールを使用してGUIレベルでドライバーを自動化することです。2つ目は、レジストリをファイルにダンプし、ドライバ設定を変更し、レジストリを再度ダンプして、違いを比較することです(機能する場合と機能しない場合があります)。

于 2008-10-03T06:49:40.950 に答える
0

私が知る限り、プリンターは、SNMP または PJL コマンドを送信することにより、プリンター ドライバーによって制御されます。しかし、すべてのプリンターがこれらのコマンド セットを完全に実装しているわけではありません。

http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=bpl07282&jumpid=reg_R1002_USENで見つけた HP プリンターの場合、いくつかの PJL コマンド (トレイに関連するものもあります)。

参考になるかわかりませんが、今後の検索の参考にしてください...

于 2008-10-03T11:05:02.660 に答える