VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2006/12/06(Wed) 20:11
投稿者太郎
Eメール
URL
タイトルDEVMODE構造体で、プリンタ固有の情報の取得及び設定

はじめまして、太郎です。

フォーム上から、SHInvokePrinterCommandやPrinterProperties()でプリンタの印刷設定ダイ
アログを表示し、印刷設定を変更します。そして、フォーム上の印刷ボタンを押し、印刷終
了後に元の設定に戻そうとしています。

そこで、印刷設定の変更前に、GetprinterでDEVMODE構造体をいったん変数に保存しまし
た(1)。そして、印刷終了後、Setprinterを使い、保存した変数をDEVMODE構造体に代入し
元に戻しました(2)。

ですが、DEVMODE構造体にない情報(プリンタ独自の情報)は設定を保存したり(1)、変更
前に戻せませんでした(2)。どのようにすれば、可能になるでしょうか?

宜しくお願いします。
※環境は、VB6.0 SP6 WindowsXPです。

/////////////////////////////////////////////////////////////////////////////
Sub 印刷設定の取得()

    ' プリンタ名指定する
    strPrinterDeviceName = Combo1.Text

    ' プリンタのオブジェクトハンドルを取得する
    lngResult =  OpenPrinter( strPrinterDeviceName, lngPrinterHandle, _
            udtPrinterDefaults)
    ' 構造体のレベルを指定する
    lngPrinterInfo2Level = 2

    ' バッファに必要なサイズを取得する
    lngResult = _
        GetPrinter( _
            lngPrinterHandle, _
            lngPrinterInfo2Level, _
            ByVal vbNullString, _
            0, _
            lngPrinterInfo2Needed)
    ' バッファを確保する
    ReDim  bytPrinterInfo2Buffer  (lngPrinterInfo2Needed - 1)

    ' 詳細なプリンタ情報を取得する
    lngResult = _
        GetPrinter( _
            lngPrinterHandle, _
            lngPrinterInfo2Level, _
            bytPrinterInfo2Buffer(0), _
            lngPrinterInfo2Needed, _
            lngPrinterInfo2Needed)
    ' 取得した詳細なプリンタ情報を構造体へ移動する
    MoveMemory _
        udtPrinterInfo2, _
        bytPrinterInfo2Buffer(0), _
        Len(udtPrinterInfo2)

    ' 取得した詳細なプリンタデバイス情報を構造体へ移動する
    MoveMemory _
        udtDevMode, _
        ByVal udtPrinterInfo2.pDevMode, _
        Len(udtDevMode)
        
    '------------------------------------------------------------------
    '【印刷設定を表示する前にDevmode構造体を一度変数に保存】
    '・・・@DEVMODE構造体にない情報(プリンタ独自の情報)が保存できません
    '------------------------------------------------------------------
    With udtDevMode
        SpecVersion = .dmSpecVersion
        DriverVersion = .dmDriverVersion
        Size = .dmSize
        DriverExtra = .dmDriverExtra
        Fields = .dmFields
        Orientation = .dmOrientation
        PaperSize = .dmPaperSize
    ・・・
    End With

    
End Sub
Sub 印刷設定の変更()

  ・・・

    '------------------------------------------------------------------
    '【印刷終了後、@で保存した変数をDevmode構造体に戻す】
    '・・・ADEVMODE構造体にない情報(プリンタ独自の情報)が設定できません。
    '------------------------------------------------------------------
    With udtDevMode
        ' 用紙が指定できるときは
        If .dmFields And DM_PAPERSIZE Then

            
            '.dmDeviceName = DeviceName
            .dmSpecVersion = SpecVersion
            .dmDriverVersion = DriverVersion
            .dmSize = Size
            .dmDriverExtra = DriverExtra
            .dmFields = Fields
            .dmOrientation = Orientation
            .dmPaperSize = PaperSize
            ・・・

            ' 構造体を取得した詳細なプリンタデバイス情報へ移動する
            MoveMemory _
                ByVal udtPrinterInfo2.pDevMode, _
                udtDevMode, _
                Len(udtDevMode)
            '詳細なプリンタ情報を書き戻し
            lngResult = _
                SetPrinter( _
                    lngPrinterHandle, _
                    lngPrinterInfo2Level, _
                    udtPrinterInfo2, _
                    0)
        End If
    End With
    ' プリンタオブジェクトをクローズ
    lngResult = ClosePrinter(lngPrinterHandle)

End Sub


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -