Printerオブジェクトから用紙名の取得


はまちゃん  2003-09-30 02:29:04  No: 108875

PrinterオブジェクトからPrinterの現在の設定を取得したいのですが、
用紙の名前が取れません。

Printer.PaperSizeとやると9とか数値で戻ってきますが、ハガキなどドライバによって異なる数値が返ってきます。

そこでそのまま用紙名を取得したいのですが、そんな事できるのでしょうか?
お願いします。


ごま  2003-09-30 09:42:03  No: 108876

用紙名は取得できないですよ、多分
ドライバと直接通信すればできるのかもしれませんが、少なくともPrinterオブジェクトからは取得できないです。
違ったら済みません。


Take1  2003-09-30 18:06:47  No: 108877

私も以前印刷ウィザードを自作した時に使用しました。
フォームにリストボックス(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


はまちゃん  2003-09-30 19:31:26  No: 108878

ありがとうございます。
うーんと、「用紙の列挙」じゃなくて、現在Printerで「設定してある用紙名」なのです。
列挙は出来るんですけど現在設定されているものがどれだかわかりません。。。

やっぱ出来ないのでしょうかね。。。


Take1  2003-09-30 22:19:08  No: 108879

失礼しました。m(_ _)m

>現在Printerで「設定してある用紙名」

PrinterObjectConstantsを使って
ライブラリを作成する方法しか思いつかないです。(^^)ゞ


はまちゃん  2003-10-01 18:19:12  No: 108880

PrinterObjectConstantsでライブラリ作成??
調べてみます。

それが出来れば取得できるんでしょうかね??^^;


はまちゃん  2003-10-07 20:45:01  No: 108881

よくわかりません。。。
はぁ、、、。ショック。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加