PrinterオブジェクトからPrinterの現在の設定を取得したいのですが、
用紙の名前が取れません。
Printer.PaperSizeとやると9とか数値で戻ってきますが、ハガキなどドライバによって異なる数値が返ってきます。
そこでそのまま用紙名を取得したいのですが、そんな事できるのでしょうか?
お願いします。
用紙名は取得できないですよ、多分
ドライバと直接通信すればできるのかもしれませんが、少なくともPrinterオブジェクトからは取得できないです。
違ったら済みません。
私も以前印刷ウィザードを自作した時に使用しました。
フォームにリストボックス(List1)をひとつ
用意してください。
Option Explicit
Private Declare Function DeviceCapabilities Lib "winspool.drv" _
Alias "DeviceCapabilitiesA" (ByVal pDevice As String, _
ByVal pPort As String, ByVal fwCapability As Long, _
pOutput As Any, pDevMode As Any) As Long
Private Const DC_PAPERNAMES = 16
Private Declare Sub MoveMemory Lib "kernel32.dll" _
Alias "RtlMoveMemory" (Destination As Any, _
Source As Any, ByVal Length As Long)
Private Sub Form_Load()
Dim myPrinter As String
Dim myPort As String
Dim myQes As Long
Dim mBuf As Long
Dim mPaper() As Byte
Dim sPaperName As String * 64
Dim AllPaper As Long
List1.Clear
With Printer
myPrinter = .DeviceName
myPort = .Port
End With
MsgBox "プリンター名 : " + myPrinter + vbCrLf + " ポート名 : " + myPort _
+ vbCrLf + "使用できる用紙名を列挙します。", vbOKOnly + vbInformation, "用紙列挙"
' 問い合わせる内容を指定
myQes = DC_PAPERNAMES
' バッファに必要なサイズを取得
mBuf = DeviceCapabilities(myPrinter, myPort, myQes, _
ByVal vbNullString, ByVal vbNullString)
' バッファ確保
ReDim mPaper(64 - 1, mBuf - 1)
'用紙名を取得
DeviceCapabilities myPrinter, myPort, myQes, mPaper(0, 0), ByVal vbNullString
'用紙名を列挙
With List1
' バッファに用紙の名前がある間は再帰的に取得
For AllPaper = 0 To mBuf - 1
' 用紙名コピー
MoveMemory ByVal sPaperName, mPaper(0, AllPaper), 64
' 用紙名追加
.AddItem Left(sPaperName, InStr(sPaperName, vbNullChar) - 1)
Next AllPaper
End With
End Sub
ありがとうございます。
うーんと、「用紙の列挙」じゃなくて、現在Printerで「設定してある用紙名」なのです。
列挙は出来るんですけど現在設定されているものがどれだかわかりません。。。
やっぱ出来ないのでしょうかね。。。
失礼しました。m(_ _)m
>現在Printerで「設定してある用紙名」
PrinterObjectConstantsを使って
ライブラリを作成する方法しか思いつかないです。(^^)ゞ
PrinterObjectConstantsでライブラリ作成??
調べてみます。
それが出来れば取得できるんでしょうかね??^^;
よくわかりません。。。
はぁ、、、。ショック。
ツイート | ![]() |