カラー印刷の機能があるか取得するには


Sinya  2005-05-31 20:45:29  No: 90162

EXCEL VBA です

印刷しようとするプリンターがカラー印刷に対応出来しているか
確認する方法は無いでしょうか。

よろしくお願いします。


ななし  2005-06-01 00:53:59  No: 90163

GetDeviceCaps APIでBITSPIXELを引数に指定して
戻り値で判断してみてはいかがでしょう。


Sinya  2005-06-01 04:16:15  No: 90164

ななしさん有難うございます。

早速、サンプルを作ってみました。
VB6.0 ですと  プリンターのハンドルをPrinter.hdcで渡せば
上手く調べることが出来ました。

EXCEL VBA で調べたいのですが、

Sub test1()

    Const BITSPIXEL = 12
    Dim ret As Long
    Dim lnghPrinter As Long
    Dim ActivePrinterName As String
    
    ActivePrinterName = Mid$(Application.ActivePrinter, 1, _
                    InStr(1, Application.ActivePrinter, " on ") - 1)
            
            
    ret = OpenPrinter(ActivePrinterName, _
                    lnghPrinter, _
                    ByVal vbNullString)

    Debug.Print GetDeviceCaps(lnghPrinter, BITSPIXEL) '<-- ここ

    ret = ClosePrinter(lnghPrinter)

End Sub

最悪、VB6.0でACTIVEX.DLLを作成すればなんとか成りそうですが
出来れば、EXCELの中だけで何とかしたいと思います。

GetDeviceCaps でどうすれば良いかご教示をお願いいたします。


魔界の仮面弁士  2005-06-01 07:44:46  No: 90165

> プリンターのハンドルをPrinter.hdcで渡せば
プリンタのハンドルというと語弊があるかも。
デバイスコンテキストハンドル、ですよね。

> GetDeviceCaps でどうすれば良いかご教示をお願いいたします。
CreateDC APIを使ってみるとか。


Sinya  2005-06-01 19:29:52  No: 90166

魔界の仮面弁士さん有難うございました。

WinXP では上手く動きましたが
WinMEでは、カラープリンターでも、モノクロプリンターでも
CreateDCで1が戻ります。
どちらのOSもデバイスコンテキストハンドルは取得できています。

Sub test()

    Const BITSPIXEL = 12
    Dim ret As Long
    Dim lnghPrinter As Long
    Dim ActivePrinterName As String
    Dim devm As DEVMODE
    Dim intPos As Integer
    
    devm.dmSize = LenB(devm)
    
    intPos = InStr(1, Application.ActivePrinter, " on ")
    If intPos > 0 Then
        ActivePrinterName = Mid$(Application.ActivePrinter, 1, intPos - 1)
    End If
    
    If intPos = 0 Then
        intPos = InStr(1, Application.ActivePrinter, " の ")
        If intPos > 0 Then
            ActivePrinterName = Mid$(Application.ActivePrinter, intPos + 3)
        Else
            MsgBox ("ありえねぇ〜")
            Exit Sub
        End If
    End If
    
            
    lnghPrinter = CreateDC("WINSPOOL", ActivePrinterName, vbNullString, devm)

    Debug.Print GetDeviceCaps(lnghPrinter, BITSPIXEL)

    ret = DeleteDC(lnghPrinter)

End Sub


クラゲ  URL  2005-06-02 05:02:32  No: 90167

http://vbvbvb.com/jp/gtips/0301/gSetPrinterDmOrientation.html

プリンタのデバイス構造体の
dmColor(int) にフラグがセットされると思います。

上記URLのサンプルを改造ではうまくいきました。
OS依存、ドライバー依存の保障はできないかもしれませんね。


Sinya  2005-06-02 18:29:42  No: 90168

クラゲさん  有難うございました。

早速試してみます。


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

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






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