はじめまして。VBというより、Win32APIの質問です。
長文で申し訳ありません。よろしいでしょうか。
現在VB6のコード上に、Win32APIのGetPrinterという関数を使用し、
プリンターの情報を取得しようとしています(バッファの必要なサイズを取得する為)
Win98は、成功します。
Windows2000は、エラーとなります。
「アクセスが拒否されました」
なぜこのようなことが起きるか、どなたかご教授下さい。以下詳細です。
補足1・Administrator権限を持つユーザでプリンターを作成。テストプリントは可能
補足2・プリンタのアクセスの許可は、プリンタの管理は許可にチェックがある。
補足3・OpenPrinter関数は成功している。(と思われる。ステータスはZERO以外の為)
pdefs.pDatatype = vbNullString
pdefs.pDevMode = 0
pdefs.DesiredAccess = PRINTER_ACCESS_ADMINISTER
' プリンタ名を指定
strDeviceName = strPrinterName
' プリンタのオブジェクトハンドルを取得
If OpenPrinter(strDeviceName, lnghPrinter, pdefs) = 0 Then
strErrAPI = "OpenPrinter"
GoSub UCoSetPrinter_Err
End If
' 構造体のレベルを指定
lngPInfo2Lvl = 2
Dim strMsg As String
' バッファの必要なサイズを取得(戻り値は0なのでError Trapしない)
'コメント Call GetPrinter(lnghPrinter, lngPInfo2Lvl, ByVal vbNullString, 0, lngPInfo2Needed)
'上記の詳細を知るため、以下に変更し、エラーのコードを取得。
If GetPrinter(lnghPrinter, lngPInfo2Lvl, ByVal vbNullString, 0, lngPInfo2Needed) = 0 Then
strMsg = pstrLastDllErrorText(Err.LastDllError)
MsgBox "エラー コード : " & strMsg
End If
以上です。宜しくお願いします。
pdefs.DesiredAccess = PRINTER_ACCESS_ADMINISTER
を
pdefs.DesiredAccess = PRINTER_ALL_ACCESS
に変更したら、正常に動作しました。
お騒がせしました。
しかしその後のSetPrinterでエラーが発生しました
(本文にはありません)。
その件はまた、新たに質問させてください。
ツイート | ![]() |