IEの印刷テンプレートは、このプロパティを使用して、ユーザーが[印刷]ダイアログボックスを閉じた後、選択したプリンターに関する情報を決定します。Visual C ++のコードを使用して、このプロパティをDEVMODE構造に設定するにはどうすればよいですか。 DEVMODE構造をバリアントに変換するにはどうすればよいですか。可能であれば、バリアントを印刷テンプレートに渡してから、jscriptで__IE_PrinterCmd_DevModeプロパティを設定できます。
2 に答える
Marc Durdin は、Delphi での詳細な例を含む優れたブログ投稿を行っています。C++ やその他の言語に簡単に移植できます。
Microsoft WebBrowser コントロールと ShowHTMLDialogEx を使用した印刷の分かりやすさ
特に、__IE_PrinterCmd_DevMode
はロック解除されている必要がありますHGLOBAL
(通常、GlobalAlloc
またはからの有効な戻り値GlobalReAlloc
)。これはどこにも文書化されていません。Mar は試行錯誤によって困難な方法を発見したとPRINTDLG.hDevMode
思いPRINTDLG.hDevNames
ますPrintDlg
。
HGLOBAL
テンプレートのスクリプトに s を整数として渡し、それらを使用して を初期化__IE_PrinterCmd_DevMode
し__IE_PrinterCmd_DevNames
、 を作成する前にTemplatePrinter
. これは、自分自身を呼び出したくなくShowHTMLDialogEx
、アプリケーションに既にフックがある場合に便利です。元のウィンドウのexternal
スクリプト オブジェクトを使用しています。テンプレートからアクセスするには、次を使用します。
dialogArguments.__IE_BrowseDocument.parentWindow.external
PS:
HGLOBAL
を整数として渡すと、32 ビット プロセスで機能します。これは、JScript の数値は実際には double float であり、53 ビットまでの連続した整数を表すことができるためです。ただし、この制限によりHGLOBAL
、64 ビット プロセスで を整数として渡すことは信頼できません。おそらく、オブジェクトにメソッドを持たせることができます。
window.external
このメソッドは、印刷テンプレートのdialogArguments
オブジェクトを期待し、整数s (または) を設定__IE_PrinterCmd_DevMode
します。__IE_PrinterCmd_DevNames
VARIANT
VT_I8
VT_UI8
私はまだこれをテストしていません。
システムのデフォルト以外のプリンタを選択したい場合は、__IE_PrinterCMD_Printer
プロパティを設定することもできます。JScript でTemplatePrinter
実行できます。設定後に作成する動作オブジェクトに影響します。ただし、このプロパティだけでは、初期設定を制御したり、ユーザーが最終的に選択したプリンターを知ることはできません。