• ベストアンサー

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の時のみエラーが 出てしまうようです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#60992
noname#60992
回答No.1

先日xpのsp2でファイアウォールを開放していなかったために 共有(していると思った)フォルダにアクセスできなかった 素人のばか者ですので、アイディアがあるわけではないですが   xpのバージョンと ファイルを共有させたり、 ファイアウォールを開放したり、 ウィルスソフトが邪魔をしないようにしたり、 その類のことでやったこと、 やっていないことを教えていただくことは可能でしょうか?

rai4_0101
質問者

補足

回答有り難うございます。 OSはクライアント、サーバー共にWinXp Home Edition Sp2です。 ファイル及びプリンタは共有済みです。 ファイアウォールはXpの標準は無効にしてあり、ソースネクスト社製のウイルスセキュリティのファイアウォールを使っています。 ウイルスセキュリティのファイアウォールを無効にしてみたのですが状況は同じでした。 宜しくお願いします。

その他の回答 (1)

回答No.2

Err.LastDllError の値は何ですか? 他のアプリ(Excel とか IE とか)での印刷はできますか?