2

ネイティブ C++/Win32/MFC ダイアログ アプリケーションで MS Web Browser ActiveX コントロールを使用して、HTML 経由でいくつかの情報をレンダリングしています。

ユーザーの操作なしで、指定されたプリンター (既定のプリンターではない) にコンテンツを印刷したいと思います。使用したいプリンターは PDF プリンターです。

私は Code Project の素敵なラッパー クラスを使用していますラッパーが提供するものは印刷です。ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER,...) を使用してコンテンツの印刷を開始する印刷メソッドを提供します。

これはうまく機能し、ユーザーの操作なしでコントロールの内容がデフォルトのプリンターに出力されます。

課題は、デフォルトとは異なるプリンターを使用することです。私の最初の試みは ::SetDefaultPrinter ( http://msdn.microsoft.com/en-us/library/windows/desktop/dd162971(v=vs.85).aspx ) を呼び出すことでした。これはうまくいかないようです。::SetDefaultPrinter を呼び出したにもかかわらず、Web ブラウザの ActiveX コントロールは依然としてシステムのデフォルト プリンタに出力しているようです。この呼び出しが何をしても無視するかのようです。

MSDNリンクで提案されているように、システム設定の変更メッセージをブロードキャストし、ブラウザウィンドウに直接送信しようとしましたが、うまくいきませんでした。

デフォルトのプリンターを使用する代わりに、指定したプリンターを Web ブラウザーの ActiveX コントロールで印刷する方法を教えてください。

4

2 に答える 2

1

私はそれを動かしました。この問題の理由は、ブラウザコントロールが間違ったプリンタに印刷していたことではなく、(ExecWBを介した)印刷操作が非同期で実行されていたことです。そのため、デフォルトのプリンターをPDFプリンターに設定し、印刷を開始してから、元のデフォルトのプリンターを復元していました。これは、非同期印刷操作の準備が整うまでに、元のデフォルトプリンターが再びデフォルトとして設定され、そのプリンターに送られるほどの速さで発生しました。

ソリューションは、デフォルトのプリンターをPDFプリンターに設定し、印刷を開始してから、印刷完了のコールバックを待ちます。そのコールバックを受信すると、元のデフォルトプリンタを復元します。

コードプロジェクトでGaryWheelerの優れたWebブラウザコントロールを使用している場合(ここを参照)、印刷完了コールバックを取得するのは非常に簡単です。仮想OnPrintTemplateTeardown()メソッドをオーバーライドするだけです。

于 2013-03-06T21:08:40.177 に答える
1

すべての手順に加えて、IE レジストリにプリンターを設定します。

HKCU\Software\Microsoft\Internet Explorer\PageSetup\printer="the required printer name"

そして、印刷後にすべてを元に戻します

于 2013-03-06T04:15:40.323 に答える