VB6でのネットワークプリンタ(OS:WInXP)に対する印刷
ご存じの方がおられましたら教えていただきたいのですが・・・
当方、VB6(SP6)でアプリを作成し印刷機能も作りました。
以前はWin2000からプリンタサーバー(Win2000につながっているプリンタ)に対してネットワーク印刷を行っていました。APIを使用して用紙方向等変更できてました。簡単な処理の流れとしては、
(1)現在選択されているプリンタの情報を取得し記憶しておく。
(2)用紙方向等の変更
(3)印刷
(4)記憶しておいた内容にプリンタを戻す
と言う具合です。
ところが、社内環境がかわり、WinXPからプリンタサーバー(WinXPにつながったプリンタ)に対して上記の処理を行うとエラーが出力されます。
調べたところ、始めにOpenPrinter関数を呼んでいるのですがこの時点で戻り値が0(関数が失敗)が帰ってきています。
ソースは以下のような感じです(一部抜粋)
' 標準的な権利を要求することを示す定数の宣言
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
' プリンタアクセス権の管理者権限を示す定数の宣言
Public Const PRINTER_ACCESS_ADMINISTER = &H4&
' プリンタアクセス権のユーザー権限を示す定数の宣言
Public Const PRINTER_ACCESS_USE = &H8&
' プリンタアクセス権すべての権限を示す定数の宣言
Public Const PRINTER_ALL_ACCESS = _
(STANDARD_RIGHTS_REQUIRED Or _
PRINTER_ACCESS_ADMINISTER Or _
PRINTER_ACCESS_USE)
' プリンタのオブジェクトハンドルを取得する関数の宣言
Declare Function OpenPrinter Lib "winspool.drv" _
Alias "OpenPrinterA" _
(ByVal pPrinterName As String, _
phPrinter As Long, _
pDefault As Any) As Long
'****************************************************
'↓処理
' プリンタ名を指定
strPrinterDeviceName = Printer.DeviceName
' プリンタアクセス権を指定
With udtPrinterDefaults
.DesiredAccess = PRINTER_ALL_ACCESS
End With
' プリンタのオブジェクトハンドルを取得
lngWin32apiResultCode = OpenPrinter(strPrinterDeviceName, lngPrinterHandle, udtPrinterDefaults)
↑
この変数の戻り値が0
試しに色々やってみました。
(1)WinXPからプリンタサーバー(OS:WinXP) ×
(2)WinXPからプリンタサーバー(OS:Win2000) ○
(3)プリンタサーバー(OS:WinXP)にアプリを ○
インストール後印刷
※ローカルプリンタに対する印刷
うまくいかないのはプリンタサーバーがWinXPの時のみエラーが
出てしまうようです。
宜しくお願いします。
お礼
色々探してみたのですが印刷前の判定は無理みたいですね。有難う御座いました。