プリンタの状態を設定 <TOP>
指定したプリンタの状態(一時停止・削除・再開)を設定します。
OpenPrinter プリンタのオブジェクトハンドルを取得
SetPrinter プリンタの詳細な情報を設定
ClosePrinter プリンタのオブジェクトハンドルを破棄
FindWindow
クラス名とウィンドウ名が指定された文字列と一致するトップレベル ウィンドウのハンドルを取得
一時停止を選択し『実行』をクリックした場合
削除・再開を選択した場合、『最新の情報に更新しています』一瞬表示され、一時停止のチェックが外れる
'================================================================ '= プリンタの状態を設定 '= (SetPrinter.bas) '================================================================ #include "Windows.bi" ' プリンタアクセス権を定義する構造体 Type PRINTER_DEFAULTS pDataType As Long pDevMode As Long DesiredAccess As Long End Type #define STANDARD_RIGHTS_REQUIRED &HF0000 '標準的な権利を要求することを示す #define PRINTER_ACCESS_ADMINISTER &H4 'プリンタアクセス権の管理者権限を示す #define PRINTER_ACCESS_USE &H8 'プリンタアクセス権のユーザー権限を示す #define PRINTER_ALL_ACCESS &HF000C 'プリンタアクセス権すべての権限を示す(&HF0000 Or &H4 Or &H8) #define PRINTER_CONTROL_PAUSE 1 '一時停止を示す #define PRINTER_CONTROL_RESUME 2 'すべての印刷ジョブ削除を示す #define PRINTER_CONTROL_PURGE 3 '再開を示す ' プリンタのオブジェクトハンドルを取得 Declare Function Api_OpenPrinter& Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName$, phPrinter&, pDefault As Any) ' プリンタの詳細な情報を設定 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&) ' 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウ(親を持たないウィンドウ)のハンドルを返す Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$) Var Shared CMD As String Var Shared TargetName As String Var Shared Text(4) As Object Var Shared Combo1 As Object Var Shared Button1 As Object For i = 0 To 4 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) Text(i).SetFontSize 14 Next Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() TargetName = "EPSON PX-G920" Text(3).SetWindowText TargetName Combo1.AddString "一時停止 PRINTER_CONTROL_PAUSE" Combo1.AddString "削 除 PRINTER_CONTROL_RESUME" Combo1.AddString "再 開 PRINTER_CONTROL_PURGE" End Sub '================================================================ '= '================================================================ Declare Sub Combo1_Change edecl () Sub Combo1_Change() Combo1.SetWindowText Left$(Combo1.GetText(Combo1.GetCursel), 8) CMD = Mid$(Combo1.GetWindowText, 10) End Sub '================================================================ '= 通常使うプリンタの状態を設定 '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var TargetHwnd As Long Var Defaults As PRINTER_DEFAULTS Var hWnd As Long Var InfoLevel As Long Var CtrlCmd As Long Var Ret As Long TargetHwnd = Api_FindWindow(ByVal 0, TargetName) 'プリンタアクセス権を指定 Defaults.DesiredAccess = PRINTER_ALL_ACCESS 'プリンタのオブジェクトハンドルを取得 Ret = Api_OpenPrinter(TargetName, hWnd, Defaults) '構造体のレベルを指定 InfoLevel = 0 '新しいプリンタの状態を指定 CtrlCmd = Combo1.GetCursel + 1 Text(4).SetWindowText Mid$(Combo1.GetText(Combo1.GetCursel), 10) '新しいプリンタの状態を設定 Ret = Api_SetPrinter(hWnd, InfoLevel, ByVal 0, CtrlCmd) 'プリンタオブジェクトをクローズ Ret = Api_ClosePrinter(hWnd) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End