投稿日 | : 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