JP2012146240A - アプリケーションプログラムとプリンタードライバー間のデータ通信方法およびプログラム - Google Patents

アプリケーションプログラムとプリンタードライバー間のデータ通信方法およびプログラム Download PDF

Info

Publication number
JP2012146240A
JP2012146240A JP2011005682A JP2011005682A JP2012146240A JP 2012146240 A JP2012146240 A JP 2012146240A JP 2011005682 A JP2011005682 A JP 2011005682A JP 2011005682 A JP2011005682 A JP 2011005682A JP 2012146240 A JP2012146240 A JP 2012146240A
Authority
JP
Japan
Prior art keywords
bit
printer driver
application
new
window handle
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2011005682A
Other languages
English (en)
Inventor
Yuki Inoue
雄輝 井上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2011005682A priority Critical patent/JP2012146240A/ja
Publication of JP2012146240A publication Critical patent/JP2012146240A/ja
Pending legal-status Critical Current

Links

Abstract

【課題】 32bitアプリケーションプログラムが呼び出す64bitプリンタードライバーにおいて、32bitアプリケーションプログラムのウィンドウハンドルを親ウィンドウハンドルに指定してダイアログを生成するプリンタードライバーを提供する。
【解決手段】 32bitアプリケーションは32bitアプリケーションのウィンドウハンドルをオペレーティングシステムが提供するAPIを介して64bitプリンタードライバーに通知し、64bitプリンタードライバーは新規64bitプロセスを生成し、32bitアプリケーションのウィンドウハンドルを新規64bitプロセスに通知し、新規64bitプロセスは通知された32bitアプリケーションのウィンドウハンドルを親ウィンドウハンドルに指定してダイアログを生成する。
【選択図】 図5

Description

アプリケーションプログラムと、プリンタードライバーとプリンタードライバーによって生成される新規プロセスの間でのデータ通信方法及びプログラムに関する。
印刷を行うアプリケーションプログラムは、一般的にオペレーティングシステム(以下OSと略す)が提供するAPIを介して、プリンターの印刷に関わる様々な情報を取得し、その情報に基づいて印刷設定の通知を行ったり、プリンター機能の実行を行う。
Windows(登録商標)(マイクロソフト社)においてアプリケーションプログラムがこれらのプリンターの印刷に関わる様々な情報を取得し、その情報に基づいて印刷設定の通知を行ったり、プリンター機能の実行を行う従来の手法としては、アプリケーションプログラムがExtEscape関数というAPIを利用するという技術が一般的である(特許文献1参照)。
このExtEscape関数を利用する技術は、アプリケーションプログラムとプリンタードライバーとの間で独自のデータの受け渡しを行い、アプリケーションからプリンタードライバーで用意されている機能を呼び出すといった目的で用いられる。
例えば、プリンタードライバーが独自の画像処理を行う為のインターフェースを備えているかどうかをアプリケーションプログラムが確認し、サポートされていれば独自の画像処理の設定を行うために、アプリケーションプログラムからプリンタードライバーに用意されている設定/実行機能ダイアログを表示するという様な処理を行う際にExtEscape関数が使用されている。
もう1つ例を挙げれば、アプリケーションプログラムがプリンターのヘッドクリーニングを行う機能がサポートされているかの情報を確認し、サポートされていればプリンタードライバーで用意されているヘッドクリーニング機能の設定/実行機能ダイアログを表示させ、ヘッドクリーニングを実行させるといった際にも使用される。
Windows(登録商標)には、32bit版OSと64bit版OSが存在しており、プリンタードライバーはOSと密接に動作する為、32bit版OSには32bitプリンタードライバー、64bit版OSには64bit版プリンタードライバーが用いられる。また、Windows(登録商標)のプリンタードライバーにはGDIプリンタードライバーとXPSプリンタードライバーという2種類のドライバが存在するが、それらのOS環境、プリンタードライバーの種類に関わらず、アプリケーションプログラムがベンダー独自情報を取得し、プリンタードライバーの機能を実行することが可能な手法が従来の方法の中で示されてきた。
特開2010−140281号公報
しかしながら、特許文献1に代表される従来の方法では、64bitOSで動作する32bitアプリケーションプログラムが64bitプリンタードライバーに対して、プリンターの印刷に関わる様々な情報を取得し、その情報に基づいて印刷設定の通知を行ったり、機能の実行を行うことができないという問題があった。具体的には、従来の手法では32bitアプリケーションプログラムが64bitプリンタードライバーに用意されている設定/実行機能ダイアログを表示させることができない問題が考慮されていない。例えば、64bitOSで動作する32bitアプリケーションプログラムが64bitプリンタードライバーに対して、プリンタードライバーで用意されているヘッドクリーニング機能の実行ダイアログを、32bitアプリケーションプログラムを親ウィンドウに指定して表示させることができない。
表示できない理由は、64bitOSで動作する32bitアプリケーションプログラムからExtEscape関数を用いて64bitプリンタードライバーでデータの受け渡しを行う際、64bitプリンタードライバーは32bitアプリケーションプログラムとは別のsplwow64プロセスというプロセスで動作するが、このsplwow64プロセスで32bitウィンドウハンドルを親ウィンドウハンドルに指定してダイアログを表示できないというOS制限があるためである。
このOS制限を回避するために、32bitアプリケーションプログラムのウィンドウハンドルを親ウィンドウハンドルに指定せずに、別のウィンドウハンドル、例えばデスクトップウィンドウハンドルを親ウィンドウハンドルに指定する方法も考えられるが、それではアプリケーションダイアログの裏側にダイアログが表示される可能性がある。また、プリンタードライバー機能のダイアログを表示しながら、アプリケーションダイアログも動作可能の状態(一般的にモードレスダイアログと呼ばれる)となる問題も発生することになる。モードレスダイアログで動作すれば、アプリケーションプログラムからあるプリンタードライバーの機能が実行されている最中に、アプリケーションプログラムから別のプリンタードライバーの機能が実行されるといった問題が発生するため好ましくない。例えば、ヘッドの位置調整機能の処理最中に、ヘッドのクリーニング機能が実行されるといったような、プリンタードライバーの仕様として想定外の動作とならないように振舞われるべきである。そのために、アプリケーションプログラムのウィンドウハンドルを親ウィンドウハンドルに指定して、アプリケーションプログラムからプリンタードライバーに用意されている設定/実行ダイアログが表示されている場合には、アプリケーションダイアログは動作できないようにする(一般的にモーダルダイアログと呼ばれる)ことが望ましい。
本発明は上記課題を解決するためになされたもので、32bitアプリケーションプログラムが、32bitアプリケーションプログラムのウィンドウハンドルを親ウィンドウハンドルに指定し、64bitプリンタードライバーに用意されている設定/実行機能ダイアログを表示させることができるようにすることを目的とする。そして、64bitOSで動作する32bitアプリケーションプログラムが64bitプリンタードライバーに対して、プリンターの印刷に関わる様々な情報を取得し、その情報に基づいて印刷設定の通知を行ったり、機能の実行を行うことができる手段を提供することを目的とする。
上述のような課題を解決するため本発明の情報処理システムは以下の構成からなる。
64bitオペレーティングシステム上で動作する32bitアプリケーションと64bitプリンタードライバー間のデータ通信方法において、前記64bitアプリケーションは前記32bitアプリケーションのウィンドウハンドルを前記OSが提供するAPIを介して前記64bitプリンタードライバーに通知する工程を有し、前記64bitプリンタードライバーが新規64bitプロセスを生成し、前記32bitアプリケーションのウィンドウハンドルを前記新規64bitプロセスに通知する工程を有し、前記新規64bitプロセスは通知された前記32bitアプリケーションのウィンドウハンドルを親ウィンドウハンドルに指定してダイアログを生成する工程を有することを特徴とするアプリケーションとプリンタードライバーのデータ通信方法。
本発明によれば、32bitアプリケーションプログラムが、32bitアプリケーションプログラムのウィンドウハンドルを親ウィンドウハンドルに指定し、64bitプリンタードライバーに用意されている設定/実行機能ダイアログを表示させることを可能とする効果を奏する。そして、64bitOSで動作する32bitアプリケーションプログラムが64bitプリンタードライバーに対して、プリンターの印刷に関わる様々な情報を取得し、その情報に基づいて印刷設定の通知を行ったり、機能の実行を行うことができる手段を提供することを可能とする効果を奏する。
画像処理装置の構成例を示すブロック図 GDIプリンタードライバー内のモジュールと処理フローを示す図 XPSプリンタードライバー内のモジュールと処理フローを示す図 アプリケーションプログラムがExtEscape関数を呼び出した時のプリンタードライバーの処理の流れを説明する為の模式図 プリンタードライバーに用意されている設定及び実行をユーザが行う際に表示される設定実行ダイアログの一例 全体処理のタイミングチャート一例 名前付き共有メモリに格納されるデータの構造の模式図 サブスレッド処理のフローチャート DrvDocumentEvent関数の処理のフローチャート イベント終了監視処理のフローチャート
以下、添付図面を参照して本発明の好適な実施の形態を詳しく説明する。尚、以下の実施の形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
図1は画像処理装置の構成例を示した図である。
ホストコンピュータ100には、インクジェットプリンタなどのプリンター104が接続されている。
ホストコンピュータ100は、ワードプロセッサ、表計算、インターネットブラウザなどのアプリケーションプログラム101を有する。印刷を行う場合、アプリケーションプログラム101によって発行される出力画像を示す各種描画処理命令群(イメージ描画命令、テキスト描画命令およびグラフィクス描画命令)は、オペレーティングシステム(OS)102を介して、プリンタードライバー103へ入力される。プリンタードライバー103は、それら描画命令群を処理して印刷データを作成しプリンター104に印刷させるソフトウェアである。
ホストコンピュータ100は、上記のソフトウェアはHDD105、またはROM108に記憶されておりRAM107に読み出されて、CPU106に実行される。なお、図1に示すホストコンピュータ100として一般に普及しているIBM AT互換機のパーソナルコンピュータを使用し、OS102としてMicrosoft社の Windows(登録商標)を使用することを想定する。そして、そのようなパーソナルコンピュータに、印刷機能を有する任意のアプリケーションプログラム101をインストールし、プリンター104を接続した形態を想定する。
ホストコンピュータ100では、アプリケーションプログラム101により、文字などのテキストに分類されるテキストデータ、図形などのグラフィクスに分類されるグラフィクスデータ、写真画像などに分類されるイメージ画像データなどを用いて出力画像データが作成される。そして、出力画像データに基づく画像を印刷する場合、アプリケーションプログラム101は、OS102に印刷出力要求を行い、テキストデータ部はテキスト描画命令、グラフィクスデータ部分はグラフィクス描画命令、イメージ画像データ部分はイメージ描画命令で構成される描画命令群をOS102に発行する。
OS102はアプリケーションプログラム101から印刷出力要求を受けると、プリンタードライバー103に描画命令群を渡す。プリンタードライバー103はOS102から渡される印刷出力要求および描画命令群を処理して、プリンター104が印刷処理可能な印刷データを作成し、その印刷データをプリンター104に送る。ホストコンピュータ100とプリンター104は例えばUSB(Universal Serial Bus)のような双方向通信が可能なインターフェースにより接続される。
次に、図2は本発明の実施形態における印刷システムのソフトウェア(主にプリンタードライバー)の構成を示すブロック図である。
まず、図2(a)に示すGDIプリンタードライバーの構成について説明する。アプリケーションプログラム101は文書を作成し、その文書を印刷するためにユーザーインターフェースモジュール203にプリンタシステムの機能を問い合わせた後、OSの印刷サービス202を含む印刷システムに印刷開始を通知する。ここでOSの印刷サービス202は、アプリケーションプログラム101から印刷開始の通知を受けると、ユーザーインターフェースモジュール203にアプリケーションプログラム101による印刷開始の印刷イベントを通知する。続いてアプリケーションプログラム101は印刷対象の文書の印刷データをOSの印刷サービス202に供給し印刷処理を続行する。OSの印刷サービス202を経由した印刷データはスプールファイル204に格納される。プリントプロセッサ205は、スプールファイル204から印刷データを読み出し、その印刷データはレンダリングモジュール206を介した後、ランゲージモニタ207に送られる。ランゲージモニタ207は、プリンター104と双方向通信を行いながら、印刷データをプリンター104へと送信する。ランゲージモニタ207は随時、プリンター104が保持しているステータスの情報を受信する。またランゲージモニタ207は、プリンター104から受信した情報や送信する印刷データを元に、現在のプリンターや印刷の状況をステータスモニタ208に伝える。ステータスモニタ208は、プリンターや印刷の状況を表示するのみでなく、何らかの理由により印刷が中断されている場合は、対処選択肢をユーザに提示し、それに対するユーザからのレスポンス入力を受け取り、ランゲージモニタ207に伝達する。上記のソフトウェアはHDD105、またはROM108に記憶されておりRAM107に読み出されて、CPU106に実行される。
次に、図2(b)に示すもう一方のプリンタードライバー(XPSプリンタードライバー) の構成について説明する。アプリケーションプログラム101からOSの印刷サービス202を介してユーザーインターフェースモジュール203を呼び出すことで、印刷に関する各種設定をユーザに行わせることができる。アプリケーションプログラム101からユーザ操作により印刷指示がなされると、その指示内容はOSの印刷サービス202に送られる。具体的には仮想化された印刷領域であるDC(Device Context)が作成され、アプリケーションプログラム101へ供給される。そして、アプリケーションプログラム101により文書データの描画処理がDCに対して行われる。描画内容はMXDC211によりXPS形式に変換され、その結果、XPS形式の印刷データが生成される。XPS形式の印刷データは、OSの印刷サービス202によって、印刷ジョブ毎にスプールファイル212として一時的に記憶装置にスプールされる。ここで、XPS形式の電子文書を作成することができるアプリケーションプログラムの場合は、XPS形式の印刷データをスプールすることも可能である。
スプールファイル212に格納されたデータはOSの印刷パイプラインサービス213により呼び出されたフィルターパイプライン214に供給される。フィルターパイプライン214は、図示しないXPSプリンタードライバーのパイプライン構成ファイルに記述されている任意の数のフィルターによって構成される。プリンター104が解釈可能な印刷コマンドがXPS形式では無い場合、少なくとも、スプールされたXPS形式のデータを印刷コマンドに変換する為のフィルターが必要となる。図2(b)ではフィルターパイプライン214はレイアウトフィルター215とレンダーフィルター216で構成される。レイアウトフィルター215はスプールファイルからXPS形式の印刷データを取得し、印刷設定に基づき必要に応じ印刷データを編集し出力する。印刷データを加工する必要が無い場合は、取得した印刷データをそのまま出力する。レイアウトフィルター215の出力は、レンダーフィルター216に供給される。レンダーフィルター216は、供給されたXPS形式の印刷データの各ページのレンダリング処理を行い、必要な画像処理を行ったうえで、印刷コマンドに変換して出力する。レンダーフィルター216が出力した印刷コマンドはプリンター104に供給され、プリンター104が印刷動作を実行する。
次にOSが提供するAPIであるExtEscape関数の動作の一例を図3に示す。ExtEscape関数を利用することにより、アプリケーションプログラム101とプリンタードライバーはデータの受け渡しを行うことができる。OSの印刷サポート機能301はOSにより提供される機能であり、アプリケーションプログラム101が呼び出したAPI関数の処理を行い、必要に応じてプリンタードライバーを呼び出す機能を有する。ユーザーインターフェースモジュール203とレンダリングモジュール206はプリンタードライバーを構成するモジュール群に含まれる。ユーザーインターフェースモジュール203は、印刷に関する各種項目の設定をユーザに行わせ、印刷設定を作成する機能やプリンターのメンテナンス機能(例えばヘッドクリーニングなど)を実行するためのユーティリティ機能を有する。レンダリングモジュール206は、アプリケーションプログラム101の描画指示を、画像に変換したり、あるいは、ページ記述言語に変換したりする機能を有する。
アプリケーションプログラム101は、例えば画像処理、ユーティリティ機能といった機能に関する情報を得る為や実行機能を呼ぶ出す為に、ExtEscape関数の引数に、ベンダー独自のEscapeコードを指定する。また、同時に、後述するEscape処理に必要なデータをExtEscape関数の引数で渡す。アプリケーションプログラム101がExtEscape関数を呼び出すと、OSの印刷サポート機能301は、プリンタードライバーのユーザーインターフェースモジュール203のDrvDocumentEvent関数313を呼び出す。DrvDocumentEvent関数313はアプリケーションプログラム101がExtEscape関数を呼び出した時の引数を参照することができ、引数に応じた処理を行う。GDIプリンタードライバーの場合、DrvDocumentEvent関数313の処理が終了すると、OSの印刷サポート機能301は、プリンタードライバーのレンダリングモジュール206のDrvEscape関数323を呼び出す。DrvEscape関数323はアプリケーションプログラム101がExtEscape関数を呼び出した時の引数を参照することができる。DrvEscape関数323は引数に応じた処理を行い、返却データを生成することができる。Escape処理部323により生成された返却データは、OSの印刷サポート機能301を介してアプリケーションプログラム101に返却される。XPSプリンタードライバーの場合、MXDC211のDrvEscape関数323が呼び出される。MXDC211はマイクロソフト社により提供されているため、ベンダー独自で定めたEscapeコードは未知のEscapeコードとして処理される。従って、GDIプリンタードライバーとは異なり、MXDC211ではベンダー独自で定めたExtEscape関数の処理はできないということになる。
プリンタードライバーは一般的に、32bitWindows(登録商標)上の32bitアプリケーションプログラム、或いは64bitWindows(登録商標)上の64bitアプリケケーションプログラムがExtEscape関数を呼び出した場合、アプリケーションプログラムと同一プロセスで動作する。一方、64bitWindows(登録商標)上の32bitアプリケーションプログラムがExtEscape関数を呼び出した場合、64bitプリンタードライバーはアプリケーションプログラムの32bitプロセスとは異なるsplwow64プロセスで動作する。
<実施形態1>
ここから実際に本発明の動作説明に移る。
(設定/実行機能ダイアログ)
まず、ユーザーインターフェースモジュール203がユーザに提供する設定/実行機能ダイアログについて説明する。図4はヘッドのクリーニング機能を実行するための設定/実行機能ダイアログ表示例である。クリーニング設定/実行機能ダイアログ401は表示エリア411〜422で構成される。
まずユーザは、クリーニングを実行するヘッドを選択する。ブラックのヘッドをクリーニングしたい場合はチェックボックス421、カラーのヘッドをクリーニングしたい場合はチェックボックス422をそれぞれチェックオンする。ヘッドを選択後、クリーニングを実行したい場合は、実行ボタン411をクリックすることで、クリーニングが実行される。キャンセルボタン412を押せばクリーニングを実行せずにクリーニング設定/実行機能ダイアログ401を閉じることができる。ヘルプボタン413はクリーニング設定/実行機能ダイアログ401の各設定項目に関する説明文を別ウィンドウで表示させることができる。
本提案では、この様な通常はプリンタードライバーから実行される設定/実行機能ダイアログを、アプリケーションプログラムから呼び出し実行させることを目的としている。
(全体処理フロー)
次に、64bitOSで動作する32bitアプリケーションプログラムがExtEscape関数を用いて、64bitプリンタードライバーに対して、印刷設定の通知や、機能の実行を行う全体の処理の流れについて説明する。図5は名前付き共有メモリ、新規64bitプロセス(64bitrundll32プロセス)、そしてExtEscape関数を用いて、32bitアプリケーションプログラム101が64bitプリンタードライバーの設定/実行機能ダイアログを表示し、機能処理を行うタイミングチャートの一例である。
最初に、32bitアプリケーションプログラム101が、ベンダーが用意したサポートモジュール501を呼び出す(502)。このサポートモジュール501は、後に説明するユーザーインターフェースモジュール203の処理の終了を監視し、アプリケーションプログラム201の代わりにExtEscape関数を呼び出す処理を行う目的で用意している。32bitアプリケーションプログラム101が、このサポートモジュール501を呼び出す際には、32bitアプリケーションプログラムのウィンドウハンドル、及びサポートモジュール501でExtEscape関数を呼び出すために必要であるベンダー独自のEscapeコードをExtEscape関数の引数に指定しておく。
次に、呼び出されたサポートモジュール501が、ExtEscape関数の処理結果を受け取るための準備処理を行う。splwow64プロセスで動作するユーザーインターフェースモジュール203は64bitrundll32プロセスを生成後、64bitrundll32プロセスでの処理終了前に、32bitアプリケーションプログラム101まで制御を返却してしまうと、64bitrundll32プロセスでの処理結果を32bitアプリケーションプログラム101に返却できない。そのため、32bitアプリケーションプログラム101に64bitrundll32プロセスでの処理結果の返却を行うために、64bitrundll32プロセスでの処理終了前に制御を32bitアプリケーションプログラム101に返却させず処理結果をサポートモジュール501で受け取ることができるようする必要がある。そのために、サポートモジュール501で64bitrundll32プロセスでの処理終了を監視する。
監視する方法としては、サポートモジュール501がサブスレッドを作成し、作成したサブスレッド内で64bitrundll32プロセスでの処理の終了を監視する。サブスレッドを作成し、作成したサブスレッド内で処理終了を監視する理由は、サポートモジュール501が64bitrundll32プロセスでの処理終了を監視すると、そこで制御が常に奪われてしまう。制御が常に奪われると、32bitアプリケーションプログラム101のウィンドウハンドルを親ウィンドウハンドルとしてダイアログを生成するメッセージが受信できず、ダイアログを表示できないという問題が生じる。この問題を回避するために、サブスレッドを作成し、作成したサブスレッド内で64bitrundll32プロセスでの処理の終了を監視する。
ここからは、以上で説明したサポートモジュール501がExtEscape関数の処理結果を受け取るための実際の準備処理を詳細に説明していく。サポートモジュール501はExtEscapeの処理結果を格納するために用いる共有メモリを作成する(503)。具体的には、名前付き共有メモリの名称を決定し、決定した名称で名前付き共有メモリを作成する。次に、64bitrundll32プロセスが64bitプリンタードライバーの印刷設定の通知や、機能の実行を行う処理の終了を知らせるイベント名称を決定し、イベントを作成する(504)。名前付き共有メモリの名称とイベント名称は、複数のアプリケーションプログラムからの実行を考慮に入れて、プロセスIDとスレッドID等を利用して一意の名称になるように決定することが望ましい。名前付き共有メモリの作成、イベントの作成を行った後、イベントの終了を監視するためのサブスレッドを作成する(505)。
サブスレッドは、OSが提供しているCreateThreadというAPI関数を用いても良いし、またはウィンドウプロシージャを新たに作成する方法を用いても良い。また、その他方法を用いても当然構わない。サブスレッド内で32bitアプリケーションプログラム101のウィンドウハンドルを引数に指定してExtEscape関数呼び出しを行うことにより、64bitsplwow64プロセスで動作するユーザーインターフェースモジュール203のDrvDocumentEvent関数の呼び出し(506)を行う。DrvDocumentEvent関数を呼び出されたユーザーインターフェースモジュール203は、印刷設定の通知や、機能の実行の処理を行わせるための、64bitrundll32プロセスを生成する(507)。64bitrundll32プロセスではDLLファイルやEXEファイルなどのファイルから任意の関数を指定して呼び出すことができる。ここでは、ユーザーインターフェースモジュール203のアプリケーションプログラム101から指定された実行すべき機能を呼び出すための関数を呼び出す。この際にも32bitアプリケーションプログラム101のウィンドウハンドルを引数に指定しておく。GDIプリンタードライバーの場合、64bitrundll32プロセスを生成後、次にレンダリングモジュール206のDrvEscape関数の呼び出しが行われる(508)。ここでは処理はなにも処理を行わず、制御をそのまま返却する(509)。XPSプリンタードライバーの場合、マイクロソフト社により提供されているMXDC211のDrvEscape関数が呼び出されるため、ベンダー独自で定めたExtEscape関数の処理はできないので、GDIプリンタードライバーと同様に何も処理を行わない。その後、64bitrundll32プロセス上で動作するユーザーインターフェースモジュール203での処理の終了を監視する(510)。
監視する方法としては、504で作成したイベントの終了通知が発行されていないかを一定時間ごとに確認するポーリング処理を行う方法が一例として挙げられる。
一方、64bitsplwow64プロセスで動作するユーザーインターフェースモジュール203から呼び出された64bitrundll32プロセス上で動作するユーザーインターフェースモジュール203は、指定された任意の関数の処理を行う。指定された機能の設定/実行ダイアログの表示を行い、ダイアログの処理結果に応じた機能処理を実行する(511)。なお、設定/実行ダイアログの表示する際には、32bitアプリケーションプログラム101のウィンドウハンドルを親ウィンドウハンドルに指定してダイアログを生成する。ダイアログの表示を行うのは64bitsplwow64プロセスではなく、64bitrundll32プロセスなので、OS制限に触れることなくダイアログを表示することができる。また、親ウィンドウハンドルを32bitアプリケーションプログラム101のウィンドウハンドルに指定することで、ダイアログ表示中はアプリケーションダイアログを動作させることができないモーダルダイアログとして表示することを可能とする。処理終了後、名前付き共有メモリにアクセスを行い、処理結果を名前付き共有メモリに格納する(512)。格納後、イベント終了通知の発行を行い(513)、64bitrundll32プロセスを終了する。
サポートモジュール501のサブスレッドは、監視処理によりイベント終了の発行がなされたことを確認すると、サブスレッドの破棄を行う(514)。サポートモジュール501は、ExtEscape関数の処理結果(戻り値)は無視し、名前付き共有メモリにアクセスし、名前付き共有メモリ内の情報をExtEscape関数の処理結果とする(515)。名前付きメモリを削除し(516)、32bitアプリケーションプログラム101に処理結果を返却する(517)。
(名前付き共有メモリに格納されるデータの構造)
次に名前付き共有メモリに格納されるデータの構造について説明する。図6は本実施例における名前付き共有メモリに格納されるデータの構造の一例を示す図である。名前付き共有メモリ601はメンバ611から651で構成される。
メンバ611は名前付き共有メモリ601のサイズを示す。メンバ613は名前付き共有メモリに利用者が付加するシグネチャである。このシグネチャはアプリケーションプログラムとプリンタードライバーが共通で識別出来るものにしておくと良い。
メンバ615は入力データの位置を示すオフセットであり、名前付き共有メモリ601の先頭からのバイト数などで表される。メンバ617は入力データのサイズであり、後述するメンバ631のサイズをバイト数等で表す。入力データについては後述する。
メンバ619は出力データの位置を示すオフセットであり、名前付き共有メモリ601の先頭からのバイト数などで表される。メンバ621は出力データのサイズであり、後述するメンバ641のサイズをバイト数等で表す。出力データについては後述する。
メンバ623は生成可否情報であり、ユーザーインターフェースモジュール203が情報の生成に成功したか否かを示す情報が格納される。
メンバ631は入力データであり、機能情報の種類等のアプリケーションプログラム101がプリンタードライバーに渡すデータが格納される。ここで、メンバ631の内容を細分化し、複数の項目を入力データとしてもよい。例えば、32bitアプリケーションプログラム101のウィンドウハンドルや名前付きメモリにアクセスするための名称や、イベント名称といった複数の情報を格納することができる。
メンバ641は出力データであり、ユーザーインターフェースモジュール203が生成した情報が格納される。ここで、メンバ641の内容を細分化し、複数の項目を出力データとしてもよい。本件では、511の処理結果を格納するのに使用している。
メンバ651は名前付き共有メモリ601の未使用領域である。
(サポートモジュールのサブスレッド処理フロー)
サポートモジュール501で行われるサブスレッド処理の詳細を説明する。詳細な処理の流れを示した処理フローを図7に示す。サポートモジュール501はサブスレッド作成後、ExtEscape関数の解釈を行い、DrvDocumentEvent関数を呼び出す(S701)。64bitsplwow64プロセスで動作するユーザーインターフェースモジュール203でのDrvDocumentEvent関数処理後、DrvEscape関数を呼び出す(S702)。その後、64bitrundll32プロセスでのプリンタードライバーの印刷設定の通知や、機能の実行を行う処理の終了を監視する(S703)。処理終了確認後サブスレッドを破棄し(S704)、サブスレッド処理を終了する(S705)。
(ユーザーインターフェースモジュールのDrvDocumentEvent関数の処理)
次に、ユーザーインターフェースモジュール203のDrvDocumentEvent関数の処理について説明する。図8はDrvDocumentEvent関数の処理のフローチャートの一例である。
まず、S801で処理を開始する。続いてS802で、通知されたイベントの種類がEscapeイベントかどうかを判断し、EscapeイベントならS803に移り、Escapeイベントで無ければS810に移る。S803ではEscapeイベントで渡されたEscapeコードがベンダー独自Escapeコードかどうかを判断し、ベンダー独自EscapeコードであればS804に移り、ベンダー独自EscapeコードでなければS805に移る。S804では、プリンタードライバーの印刷設定の通知や、機能の実行を行う処理を行わせるために、64bitrundll32プロセスを生成する。64bitrundll32プロセスを生成する際に、ユーザーインターフェースモジュール203がユーザに提供する設定/実行機能ダイアログをモーダルダイアログで表示するために必要な32bitアプリケーションプログラム101のウィンドウハンドルを引数として渡す。S810ではEscapeイベント以外の各種イベントに応じた処理を行い、S805に移る。S810の各種イベントと、イベントに応じた処理の内容は本発明に関連が無いため詳細は説明しない。最後にS805で処理を終了する。
(サポートモジュールのサブスレッド処理内のイベント終了監視処理)
次に、サポートモジュール501のサブスレッド処理内で行うイベント終了監視処理について説明する。図9はイベント終了監視処理のフローチャートの一例である。
まず、S901で処理を開始する。次に対象イベント、ここでは図5の504にて作成されたイベントの処理終了の通知が発行されたかどうか確認する(S902)。発行されていなければ、S903にて一定時間待機し、その後、S902のイベントの処理終了の通知の発行の確認に戻り、通知が発行されるまで繰り返す。S903の待機時間は、特に決められていないが、あまりに短いとPCの処理が遅くなるといった弊害も発生する可能性もある。逆にあまりに長いと、処理終了の通知の確認が即座に行われないといったこともある。待機時間はこれらのことを考慮しつつ、環境や状況に応じた適切な時間にすることが好ましい。S902にてイベントの終了通知の発行が確認されたならば、S904にてイベント終了監視処理を終了する。
<実施形態2>
本発明の目的は前述した実施例の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUまたはMPU)が記録媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することとなり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROM、DVDなどを用いることができる。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOperating System(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
101 アプリケーションプログラム
102 OS
103 プリンタードライバー
203 ユーザーインターフェースモジュール
206 レンダリングモジュール
211 MXDC
301 OSの印刷サポート機能
501 サポートモジュール

Claims (8)

  1. 64bitオペレーティングシステム上で動作する32bitアプリケーションと64bitプリンタードライバー間のデータ通信方法において、前記32bitアプリケーションは前記32bitアプリケーションのウィンドウハンドルを前記オペレーティングシステムが提供するAPIを介して前記64bitプリンタードライバーに通知する工程を有し、前記64bitプリンタードライバーが新規64bitプロセスを生成し、前記32bitアプリケーションのウィンドウハンドルを前記新規64bitプロセスに通知する工程を有し、前記新規64bitプロセスは通知された前記32bitアプリケーションのウィンドウハンドルを親ウィンドウハンドルに指定してダイアログを生成する工程を有することを特徴とするアプリケーションとプリンタードライバーのデータ通信方法。
  2. 前記32bitアプリケーションと前記64bitプリンタードライバーは独立したプロセスで動作し、前記64bitプリンタードライバーはsplwow64プロセスで動作することを特徴とする請求項1に記載のデータ通信方法。
  3. 前記64bitプリンタードライバーは名前付きオブジェクトを生成し、少なくとも前記名前付きオブジェクトの名前あるいは名前を生成するための名前情報を前記新規64bitプロセスに通知する工程と、前記64bitプリンタードライバーは前記名前付きオブジェクトに格納された前記返却値を参照する工程と、前記新規64bitプロセスの処理の終了通知を受信する工程と、前記新規64bitプロセスは前記64bitプリンタードライバーに処理終了を通知する工程を有することを特徴とする請求項1に記載のデータ通信方法。
  4. 前記名前付きオブジェクトは名前付き共有メモリであり、前記OSが提供するAPIはExtEscape関数であることを特徴とする請求項3に記載のデータ通信方法。
  5. 前記新規64bitプロセスはrundll32プロセスであることを特徴とする請求項1に記載のデータ通信方法。
  6. 前記新規64bitプロセスの処理の終了通知を受信する工程は、サブスレッドを作成
    し、サブスレッド内でイベント名称から作成されたイベントが終了されたかどうかを見張る工程を有し、前記新規64bitプロセスは前記64bitプリンタードライバーに処理終了を通知する工程は、イベント名称からイベントの終了を発行する工程を有する請求項3に記載のデータ通信方法。
  7. 64bitオペレーティングシステム上で動作する32bitアプリケーションと64bitプリンタードライバー間のデータ通信において、前記32bitアプリケーションは前記32bitアプリケーションのウィンドウハンドルを前記オペレーティングシステムが提供するAPIを介して前記64bitプリンタードライバーに通知する手段を有し、前記64bitプリンタードライバーが新規64bitプロセスを生成し、前記32bitアプリケーションのウィンドウハンドルを前記新規64bitプロセスに通知する手段を有し、前記新規64bitプロセスは通知された前記32bitアプリケーションのウィンドウハンドルを親ウィンドウハンドルに指定してダイアログを生成する手段を有することを特徴とするアプリケーションとプリンタードライバーのデータ処理装置。
  8. 64bitオペレーティングシステム上で動作する32bitアプリケーションと64bitプリンタードライバー間のデータ通信方法において、前記32bitアプリケーションは前記32bitアプリケーションのウィンドウハンドルを前記オペレーティングシステムが提供するAPIを介して前記64bitプリンタードライバーに通知する手順と、前記64bitプリンタードライバーが新規64bitプロセスを生成し、前記64bitアプリケーションのウィンドウハンドルを前記新規64bitプロセスに通知する手順と、前記新規64bitプロセスは通知された前記32bitアプリケーションのウィンドウハンドルを親ウィンドウハンドルに指定してダイアログを生成する手順とをコンピュータに実行させるためのプログラム。
JP2011005682A 2011-01-14 2011-01-14 アプリケーションプログラムとプリンタードライバー間のデータ通信方法およびプログラム Pending JP2012146240A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011005682A JP2012146240A (ja) 2011-01-14 2011-01-14 アプリケーションプログラムとプリンタードライバー間のデータ通信方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011005682A JP2012146240A (ja) 2011-01-14 2011-01-14 アプリケーションプログラムとプリンタードライバー間のデータ通信方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2012146240A true JP2012146240A (ja) 2012-08-02

Family

ID=46789721

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011005682A Pending JP2012146240A (ja) 2011-01-14 2011-01-14 アプリケーションプログラムとプリンタードライバー間のデータ通信方法およびプログラム

Country Status (1)

Country Link
JP (1) JP2012146240A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014219730A (ja) * 2013-05-01 2014-11-20 株式会社リコー 印刷処理装置及びプログラム
JP2015043127A (ja) * 2013-08-26 2015-03-05 株式会社リコー プログラム、情報処理装置および画像処理システム
JP2018036755A (ja) * 2016-08-30 2018-03-08 キヤノン株式会社 制御方法、プログラム及び情報処理装置
JP2018101303A (ja) * 2016-12-20 2018-06-28 キヤノンマーケティングジャパン株式会社 情報処理装置とその処理方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014219730A (ja) * 2013-05-01 2014-11-20 株式会社リコー 印刷処理装置及びプログラム
JP2015043127A (ja) * 2013-08-26 2015-03-05 株式会社リコー プログラム、情報処理装置および画像処理システム
JP2018036755A (ja) * 2016-08-30 2018-03-08 キヤノン株式会社 制御方法、プログラム及び情報処理装置
JP2018101303A (ja) * 2016-12-20 2018-06-28 キヤノンマーケティングジャパン株式会社 情報処理装置とその処理方法

Similar Documents

Publication Publication Date Title
US7707325B2 (en) Job status monitoring system, job status monitoring method, program, and storage medium
US20030103081A1 (en) Printing control apparatus, system and method
US20120140269A1 (en) Information processing device, information processing method, and recording medium
JP2008021315A (ja) ワークフロー選択プロセスおよびシステム
US20120194860A1 (en) Image forming apparatus, method of controlling image forming apparatus, and storage medium
JP2013149085A (ja) 印刷システム、印刷制御装置、および印刷制御プログラム
JP5361358B2 (ja) 情報処理装置およびその制御方法、並びにプログラム
JP2008305142A (ja) 情報処理装置、情報処理方法、及びプログラム
JP2012146240A (ja) アプリケーションプログラムとプリンタードライバー間のデータ通信方法およびプログラム
US8625117B2 (en) Apparatus for controlling image formation, computer readable device having stored thereon computer-executable instructions for forming images, and method of generating image formation setting information
JP2007293772A (ja) 印刷装置制御システム及びプリンタドライバ
JP2011237901A (ja) プレビュー画面表示制御装置およびプログラム
JP6575270B2 (ja) 印刷設定支援装置及びプログラム
JP2015184915A (ja) 情報処理装置及びその方法、プログラム
JP6089542B2 (ja) 印刷制御装置、印刷制御方法、及び、プログラム
KR100720922B1 (ko) 인쇄 제어 프로그램을 격납한 전자계산기, 및 인쇄 제어용 프로그램을 기록한 전자계산기로 읽을 수 있는 저장매체
JP5268604B2 (ja) 情報処理装置及び情報処理方法
JP2013058088A (ja) 情報処理装置、プログラム、記憶媒体
JP2011113165A (ja) 情報処理方法、そのプログラム及び情報処理装置
US9207889B2 (en) Information processing apparatus, information processing method, and storage medium
US20140146340A1 (en) Print managment apparatus, image forming system, and non-transitory computer readable medium
US20180285036A1 (en) System and method for pre-generation of page description language (pdl) for printing
JP5785989B2 (ja) 画像形成システム、画像形成装置、および表示装置
JP2010191994A (ja) ジョブ状態監視システム、ジョブ状態監視方法、プログラム及び記憶媒体
US20220283750A1 (en) Information processing apparatus, method of controlling information processing apparatus, and storage medium