DEVNAMESとDEVMODE構造体を自前で作るとCreateDCでACCESS_DENY(GetLastError()が5)なのに、PrintDlg()で表示したプリンタダイアログからもらったPRINTDLG構造体の中のDEVMODE,DEVNAMESのハンドルを渡せばOK…という現象が手元でおこっている。
実際CreateDCやっているのは私じゃなくて、よそ様のライブラリなのだけれど…うーん、わからん。サーバ処理だから、PrintDlg()でUI出すのはできないのだけれど、フックして指定したプリンタを選択したことにしてしまうか…なぁ。ちなみにやっているのはこんな手順。
- OpenPrinter()
- EnumPrinters()でPRINTER_INFO_2を取得。
- PRINTER_INFO_2からDEVNAMES,DEVMODE構造体の領域をGlobalAlloc/Lockで取得して、そのハンドルを渡す。