3

IEの印刷テンプレートは、このプロパティを使用して、ユーザーが[印刷]ダイアログボックスを閉じた後、選択したプリンターに関する情報を決定します。Visual C ++のコードを使用して、このプロパティをDEVMODE構造に設定するにはどうすればよいですか。 DEVMODE構造をバリアントに変換するにはどうすればよいですか。可能であれば、バリアントを印刷テンプレートに渡してから、jscriptで__IE_PrinterCmd_DevModeプロパティを設定できます。

4

2 に答える 2

3

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_DevNamesVARIANTVT_I8VT_UI8

私はまだこれをテストしていません。

システムのデフォルト以外のプリンタを選択したい場合は、__IE_PrinterCMD_Printerプロパティを設定することもできます。JScript でTemplatePrinter実行できます。設定後に作成する動作オブジェクトに影響します。ただし、このプロパティだけでは、初期設定を制御したり、ユーザーが最終的に選択したプリンターを知ることはできません。

于 2013-02-06T18:15:49.407 に答える