none
PRINTER_INFO_8とPRINTER_INFO_9 RRS feed

  • 質問

  •  PRINTER_INFO_9 の内容と PRINTER_INFO_8 の内容について教えてください。
     MSDN の記述では、PRINTER_INFO_9 は“per user”、PRINTER_INFO_8 は“global”とのことですが、それぞれの内容は何を元に設定されるのか、という疑問です。
     どうやら、PRINTER_INFO_8 はインストール時のデフォルト値、その後、プリンタの設定ダイアログを使って変更した内容が PRINTER_INFO_9 に入っている(設定変更しなければ、PRINTER_INFO_8 と PRINTER_INFO_9 は同じ)、という感じなのですが、この理解で合っているでしょうか。
     だとすると、PRINTER_INFO_8 で取得できる内容はプリンタ(あるいはインストーラーやドライバ)によって固定である、ということになるでしょうか。
     なお、プリンタのインストール・設定変更・PRINTER_INFO_8/9 を取得するアプリの実行は、すべて同一のユーザーです。

     経緯を説明しますと、印刷関連の処理をする Windows サービスを作ったのですが、GetPrinter() で PRINTER_INFO_9 が取得できない、という現象が起こっています。具体的には、戻ってきた PRINTER_INFO_9 の pDevMode が NULL になります。同じコードを通常のアプリケーションで実行すると正しく取得できるので、コード自体は合っていると思います。
     調べていたら、PRINTER_INFO_8 は取得できるが、どうやら初期値っぽい設定になっているので、どういうことだろう、と思った次第です。
     取得できない件については、サービスのユーザーを管理者権限を持ったユーザーにしてもだめなので、サービスであるがための制限だろうか、と想像しています。
     PRINTER_INFO_8 の内容を書き換えてしまうツールを作る、という逃げもある、と思っているところですが、正しいところを把握したく、質問させていただきました。

     なお、“JAPAN Platform SDK(Windows SDK) Support Team Blog”の、サービスで印刷処理をする場合 .NET は使えない、という 2013/11/17 の記事には目を通してあり、そのようにしています。

    2016年3月31日 9:21

回答

すべての返信