IEの印刷テンプレートは、このプロパティを使用して、ユーザーが印刷ダイアログボックスを閉じた後に選択したプリンタに関する情報を確認します。 Visual C++でコードを持つDEVMODE構造体にこのプロパティを設定するにはどうすればよいですか? DEVMODE構造体をに変換するにはどうすればよいですか?可能であれば、バリアントを印刷テンプレートに渡し、jscriptの__IE_PrinterCmd_DevModeプロパティを設定することができます。__IE_PrinterCmd_DevModeプロパティをVisual C++のIEで印刷テンプレートのDEVMODE構造体に設定する方法
答えて
Marc Durdinは、デルファイの詳細な例を持つ優れたブログ記事を持っています。特に
Demystifying printing with the Microsoft WebBrowser control and ShowHTMLDialogEx
、__IE_PrinterCmd_DevMode
のロックが解除HGLOBAL
(GlobalAlloc
またはGlobalReAlloc
から一般的に有効な戻り値)でなければなりません:それは、C++や他の言語へ簡単に移植です。これはどこにも記載されていません。私は、PrintDlg
への呼び出しで直接提供されたように、PRINTDLG.hDevMode
and PRINTDLG.hDevNames
フィールドの値を使って作業することを最終的に試行錯誤してマークを見つけたと思います。
私は、テンプレートのスクリプトに整数としてHGLOBAL
Sを渡すとTemplatePrinter
を作成する前に、__IE_PrinterCmd_DevMode
と__IE_PrinterCmd_DevNames
を初期化するためにそれらを使用することができました。これはShowHTMLDialogEx
に電話したくない場合に便利です。アプリケーションにはすでにフックがあります。元のウィンドウのexternal
スクリプトオブジェクトを使用しています。テンプレートからアクセスするには、私が使用します。
dialogArguments.__IE_BrowseDocument.parentWindow.external
PS:整数のJScriptの数字は、最大シーケンシャル整数を表すことができ、実際には二重の山車であるため、32ビットプロセスで動作として
HGLOBAL
を渡します53ビット。しかし、この制限のため、HGLOBAL
を64ビットプロセスで整数として渡すことは信頼性がありません。たぶん、あなたはあなたの
window.external
オブジェクトが整数VARIANT
S(VT_I8
またはVT_UI8
)と__IE_PrinterCmd_DevMode
と__IE_PrinterCmd_DevNames
を設定し、印刷テンプレートのdialogArguments
オブジェクトを、期待する方法を持たせることができます。まだテストしていません。
システムのデフォルト以外のプリンタを選択したい場合は、__IE_PrinterCMD_Printer
プロパティを設定することもできます。 JScriptでこれを行うことができます。設定した後に作成する動作オブジェクトのTemplatePrinter
に影響します。ただし、このプロパティだけでは、初期設定を制御したり、ユーザーが最終的に選択したプリンタを知ることはできません。
私はちょうど同じ問題を抱えており、__IE_PrinterCmd_DevModeと__IE_PrinterCmd_DevNamesはIntPtrから設定できることがわかりました。
これはX86アプリケーション上にあるため、x64またはAnyCPUで何が起こるかは不明です。
私はクラスを使用して、外部オブジェクトを通じてDevModeとDevNamesを渡します。
はここで、このために、コードの主要部分です:
Public Class PrintObjCls
Public Printer As String
Public DevMode As IntPtr
Public DevNames As IntPtr
Public Printing As Boolean
Public Failed As Boolean
Public Progress As Integer
End Class
Sub PrintToTemplate(Web as WebBrowser, Settings as PrinterSettings)
Dim Obj As New PrintObjCls
Obj.Printer = Settings.PrinterName
Obj.DevMode = Settings.GetHdevmode
Obj.DevNames = Settings.GetHdevnames
Web.ObjectForScripting = Obj
End Sub
を次に印刷テンプレート
var ext = doc.parentWindow.external;
dialogArguments.__IE_PrinterCMD_Printer = ext.Printer;
dialogArguments.__IE_PrinterCmd_DevMode = ext.DevMode;
dialogArguments.__IE_PrinterCmd_DevNames = ext.DevNames;
これは答えのようには聞こえませんか? –
正直、時にはトロールはちょうど待つことができない!これは、DevModeを印刷テンプレートに渡す方法の答えです – AndrewC
- 1. すぐに構造体名を印刷
- 2. Cの構造体の値を印刷するのに苦労します
- 3. Visual C++での構造体の整列
- 4. Xcodeで構造体の整列を設定する方法
- 5. Rオブジェクトの構造をコンソールに印刷する方法
- 6. リンクされたC構造体を印刷する際の問題
- 7. データ構造の印刷
- 8. C#印刷のプロパティ
- 9. C - whileループ以外の構造体を印刷できません
- 10. 構造/テンプレート名で構造/テンプレートIDを取得する方法
- 11. C構造体内の構造体内部の構造体
- 12. 構造体を別の構造体に渡す方法
- 13. C++構造体の初期化方法
- 14. 印刷私は、以下の構造を有するC++
- 15. データベース構造ビューア/印刷
- 16. 構造体ポインタを設定する
- 17. C#の構造体をCの構造体に変換するには?
- 18. C#で印刷するウェブブラウザのメディアタイプを設定するには?
- 19. テーブルの構造とその内容をSQLで印刷する方法
- 20. Ocamlで文字列にツリー構造を高速に印刷する方法は?
- 21. MATLABの構造体に構造体を作成するには? Cコードで
- 22. C#設定クラスの構造
- 23. 構造体のベクトルをC++で初期化する方法
- 24. C#で構造体の配列を整列する方法は?
- 25. Cで構造体の配列をソートする方法は?
- 26. 構造体をC++でVARIANTに変換する方法
- 27. Objective-cプロパティ(C構造体)のアドレスを取得します
- 28. WindowsユニバーサルC++プロジェクトでの印刷方法
- 29. 構造体内の構造体内のバッファにコピーする方法
- 30. は、構造体の特定のC
あなたは、このプロパティを設定することはできませんで、それは読み取り専用です。 –
印刷テンプレートは読み取り専用です。しかし、印刷ダイアログボックスで設定されています。私は、カスタム印刷ダイアログボックスを実装したいと思って、このプロパティを通して印刷テンプレートにユーザ設定を渡したいと思っています。 –