プリンタのオンライン・オフライン切替 <TOP>
通常使うプリンタを「オンライン・オフライン」で使用するかを切り替えます。
OpenPrinter プリンタオブジェクトをオープン
GetPrinter プリンタの詳細な情報を取得
MoveMemory メモリの指定領域をコピー
SetPrinter プリンタの詳細な情報を設定
ClosePrinter プリンタオブジェクトを閉じる
'================================================================ '= プリンタのオンライン・オフライン切替
'= (PrinterOffline.bas) '================================================================ #include "Windows.bi" Type PRINTER_DEFAULTS pDatatype As Long pDevMode As Long DesiredAccess As Long End Type Type PRINTER_INFO_2 pServerName As Long pPrinterName As Long pShareName As Long pPortName As Long pDriverName As Long pComment As Long pLocation As Long pDevMode As Long pSepFile As Long pPrintProcessor As Long pDatatype As Long pParameters As Long pSecurityDescriptor As Long Attributes As Long Priority As Long DefaultPriority As Long StartTime As Long UntilTime As Long Status As Long cJobs As Long AveragePPM As Long End Type #define STANDARD_RIGHTS_REQUIRED &HF0000 '標準的な権利を要求することを示す定数 #define PRINTER_ACCESS_ADMINISTER &H4 'プリンタアクセス権の管理者権限を示す定数の宣言 #define PRINTER_ACCESS_USE &H8 'プリンタアクセス権のユーザー権限を示す定数の宣言 #define PRINTER_ALL_ACCESS (&HF0000 or &H4 or &H8) ' #define PRINTER_ATTRIBUTE_WORK_OFFLINE &H400 'プリンタがオフライン ' プリンタオブジェクトをオープン Declare Function Api_OpenPrinter& Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName$, phPrinter&, pDefault As Any) ' プリンタの詳細な情報を取得 Declare Function Api_GetPrinter& Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter&, ByVal Level&, pPrinter As Any, ByVal cbBuf&, pcbNeeded&) ' メモリの指定領域をコピー Declare Sub MoveMemory Lib "Kernel32" Alias "RtlMoveMemory" (Dest As Any, Source As Any, ByVal length&) ' プリンタの詳細な情報を設定 Declare Function Api_SetPrinter& Lib "winspool.drv" Alias "SetPrinterA" (ByVal hPrinter&, ByVal Level&, pPrinter As Any, ByVal Command&) ' プリンタオブジェクトを閉じる Declare Function Api_ClosePrinter& Lib "winspool.drv" Alias "ClosePrinter" (ByVal hPrinter&) Var Shared Combo1 As Object Var Shared Button1 As Object Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Combo1.AddString "オフライン" Combo1.AddString "オンライン" End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var PrtDevName As String Var pd As PRINTER_DEFAULTS Var hPrinter As Long Var Level As Long Var Need As Long Var pi2 As PRINTER_INFO_2 Var Ret As Long 'プリンタ名を指定 PrtDevName = "KONICA MINOLTA magicolor 2400W" 'Printer.DeviceName 'プリンタアクセス権を指定 pd.DesiredAccess = PRINTER_ALL_ACCESS 'プリンタのオブジェクトハンドルを取得 Ret = Api_OpenPrinter(PrtDevName, hPrinter, pd) '構造体のレベルを指定 Level = 2 'バッファに必要なサイズを取得 Ret = Api_GetPrinter(hPrinter, Level, ByVal 0, 0, Need) 'バッファを確保 Var Buffer(Need - 1) As Byte '詳細なプリンタ情報を取得 Ret = Api_GetPrinter(hPrinter, Level, Buffer(0), Need, Need) '取得した詳細なプリンタ情報を構造体へ移動 MoveMemory pi2, Buffer(0), Len(pi2) 'オフライン設定が選択されているとき If Combo1.GetWindowText = "オフライン" Then 'オフライン属性を設定 pi2.Attributes = PRINTER_ATTRIBUTE_WORK_OFFLINE 'オフライン設定が選択されていないとき Else 'オフライン属性を解除 pi2.Attributes = pi2.Attributes Xor PRINTER_ATTRIBUTE_WORK_OFFLINE End If '詳細なプリンタ情報を書き戻し Ret = Api_SetPrinter(hPrinter, Level, pi2, 0) 'プリンタオブジェクトをクローズ Ret = Api_ClosePrinter(hPrinter) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End