プロが教えるわが家の防犯対策術!

ご存じの方がおられましたら教えていただきたいのですが・・・

当方、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の時のみエラーが
出てしまうようです。

宜しくお願いします。

A 回答 (2件)

先日xpのsp2でファイアウォールを開放していなかったために


共有(していると思った)フォルダにアクセスできなかった
素人のばか者ですので、アイディアがあるわけではないですが
 
xpのバージョンと
ファイルを共有させたり、
ファイアウォールを開放したり、
ウィルスソフトが邪魔をしないようにしたり、

その類のことでやったこと、
やっていないことを教えていただくことは可能でしょうか?

この回答への補足

回答有り難うございます。

OSはクライアント、サーバー共にWinXp Home Edition Sp2です。
ファイル及びプリンタは共有済みです。
ファイアウォールはXpの標準は無効にしてあり、ソースネクスト社製のウイルスセキュリティのファイアウォールを使っています。

ウイルスセキュリティのファイアウォールを無効にしてみたのですが状況は同じでした。

宜しくお願いします。

補足日時:2008/02/07 18:42
    • good
    • 0

Err.LastDllError の値は何ですか?


他のアプリ(Excel とか IE とか)での印刷はできますか?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!