プリンタの状態を設定          <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