Documentation ¶
Overview ¶
Windows printing.
Index ¶
- Constants
- Variables
- func ClosePrinter(h syscall.Handle) (err error)
- func Default() (string, error)
- func EndDocPrinter(h syscall.Handle) (err error)
- func EndPagePrinter(h syscall.Handle) (err error)
- func EnumJobs(h syscall.Handle, firstJob uint32, noJobs uint32, level uint32, buf *byte, ...) (err error)
- func EnumPrinters(flags uint32, name *uint16, level uint32, buf *byte, bufN uint32, ...) (err error)
- func FindClosePrinterChangeNotification(h syscall.Handle) (err error)
- func FindFirstPrinterChangeNotification(h syscall.Handle, filter uint32, options uint32, ...) (rtn syscall.Handle, err error)
- func FindNextPrinterChangeNotification(h syscall.Handle, cause *uint16, options *PRINTER_NOTIFY_OPTIONS, ...) (err error)
- func FreePrinterNotifyInfo(info *PRINTER_NOTIFY_INFO) (err error)
- func GetDefaultPrinter(buf *uint16, bufN *uint32) (err error)
- func GetJob(h syscall.Handle, jobId uint32, level uint32, buf *byte, bufN uint32, ...) (err error)
- func GetPrinter(h syscall.Handle, level uint32, buf *byte, bufN uint32, needed *uint32) (err error)
- func GetPrinterDriver(h syscall.Handle, env *uint16, level uint32, di *byte, n uint32, ...) (err error)
- func JobNotifyFieldToString(field uint16) string
- func OpenPrinter(name *uint16, h *syscall.Handle, defaults uintptr) (err error)
- func ReadNames() ([]string, error)
- func SetJob(h syscall.Handle, jobId uint32, level uint32, buf *byte, command uint32) (err error)
- func StartDocPrinter(h syscall.Handle, level uint32, docinfo *DOC_INFO_1) (rtn uint32, err error)
- func StartPagePrinter(h syscall.Handle) (err error)
- func WritePrinter(h syscall.Handle, buf *byte, bufN uint32, written *uint32) (err error)
- type ChangeNotificationHandle
- type DOC_INFO_1
- type DRIVER_INFO_8
- type DriverInfo
- type Info
- type JOB_INFO_4
- type JobInfo
- type NOTIFY_DATA
- type NotifyInfo
- type NotifyInfoData
- type PRINTER_INFO_5
- type PRINTER_NOTIFY_INFO
- type PRINTER_NOTIFY_INFO_DATA
- type PRINTER_NOTIFY_OPTIONS
- type PRINTER_NOTIFY_OPTIONS_TYPE
- type Printer
- func (p *Printer) ChangeNotifications(filter uint32, options uint32, printerNotifyOptions *PRINTER_NOTIFY_OPTIONS) (*ChangeNotificationHandle, error)
- func (p *Printer) Close() error
- func (p *Printer) DriverInfo() (*DriverInfo, error)
- func (p *Printer) EndDocument() error
- func (p *Printer) EndPage() error
- func (p *Printer) GetNotifications(done <-chan struct{}, filter uint32, options uint32, ...) (<-chan *NotifyInfo, error)
- func (p *Printer) Job(jobId uint32) (*JobInfo, error)
- func (p *Printer) Jobs() ([]JobInfo, error)
- func (p *Printer) PrinterInfo() (*Info, error)
- func (p *Printer) SetJob(jobID uint32, jobInfo *JobInfo, command uint32) error
- func (p *Printer) StartDocument(name, outputFile, datatype string) (uint32, error)
- func (p *Printer) StartPage() error
- func (p *Printer) StartRawDocument(name, outputFile string) (uint32, error)
- func (p *Printer) Write(b []byte) (int, error)
Constants ¶
const ( PRINTER_ENUM_LOCAL = 2 PRINTER_ENUM_CONNECTIONS = 4 PRINTER_DRIVER_XPS = 0x00000002 PRINTER_CHANGE_ADD_PRINTER = 0x00000001 PRINTER_CHANGE_SET_PRINTER = 0x00000002 PRINTER_CHANGE_DELETE_PRINTER = 0x00000004 PRINTER_CHANGE_FAILED_CONNECTION_PRINTER = 0x00000008 PRINTER_CHANGE_PRINTER = 0x000000FF PRINTER_CHANGE_ADD_JOB = 0x00000100 PRINTER_CHANGE_SET_JOB = 0x00000200 PRINTER_CHANGE_DELETE_JOB = 0x00000400 PRINTER_CHANGE_WRITE_JOB = 0x00000800 PRINTER_CHANGE_JOB = 0x0000FF00 PRINTER_CHANGE_ADD_FORM = 0x00010000 PRINTER_CHANGE_SET_FORM = 0x00020000 PRINTER_CHANGE_DELETE_FORM = 0x00040000 PRINTER_CHANGE_FORM = 0x00070000 PRINTER_CHANGE_ADD_PORT = 0x00100000 PRINTER_CHANGE_CONFIGURE_PORT = 0x00200000 PRINTER_CHANGE_DELETE_PORT = 0x00400000 PRINTER_CHANGE_PORT = 0x00700000 PRINTER_CHANGE_ADD_PRINT_PROCESSOR = 0x01000000 PRINTER_CHANGE_DELETE_PRINT_PROCESSOR = 0x04000000 PRINTER_CHANGE_PRINT_PROCESSOR = 0x07000000 PRINTER_CHANGE_SERVER = 0x08000000 PRINTER_CHANGE_ADD_PRINTER_DRIVER = 0x10000000 PRINTER_CHANGE_SET_PRINTER_DRIVER = 0x20000000 PRINTER_CHANGE_DELETE_PRINTER_DRIVER = 0x40000000 PRINTER_CHANGE_PRINTER_DRIVER = 0x70000000 PRINTER_CHANGE_TIMEOUT = 0x80000000 PRINTER_CHANGE_ALL = 0x7F77FFFF JOB_NOTIFY_FIELD_PRINTER_NAME = 0x00 JOB_NOTIFY_FIELD_MACHINE_NAME = 0x01 JOB_NOTIFY_FIELD_PORT_NAME = 0x02 JOB_NOTIFY_FIELD_USER_NAME = 0x03 JOB_NOTIFY_FIELD_NOTIFY_NAME = 0x04 JOB_NOTIFY_FIELD_DATATYPE = 0x05 JOB_NOTIFY_FIELD_PRINT_PROCESSOR = 0x06 JOB_NOTIFY_FIELD_PARAMETERS = 0x07 JOB_NOTIFY_FIELD_DRIVER_NAME = 0x08 JOB_NOTIFY_FIELD_DEVMODE = 0x09 JOB_NOTIFY_FIELD_STATUS = 0x0A JOB_NOTIFY_FIELD_STATUS_STRING = 0x0B JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR = 0x0C JOB_NOTIFY_FIELD_DOCUMENT = 0x0D JOB_NOTIFY_FIELD_PRIORITY = 0x0E JOB_NOTIFY_FIELD_POSITION = 0x0F JOB_NOTIFY_FIELD_SUBMITTED = 0x10 JOB_NOTIFY_FIELD_START_TIME = 0x11 JOB_NOTIFY_FIELD_UNTIL_TIME = 0x12 JOB_NOTIFY_FIELD_TIME = 0x13 JOB_NOTIFY_FIELD_TOTAL_PAGES = 0x14 JOB_NOTIFY_FIELD_PAGES_PRINTED = 0x15 JOB_NOTIFY_FIELD_TOTAL_BYTES = 0x16 JOB_NOTIFY_FIELD_BYTES_PRINTED = 0x17 JOB_NOTIFY_FIELD_REMOTE_JOB_ID = 0x18 PRINTER_NOTIFY_TYPE = 0 // TODO: Implement support for this JOB_NOTIFY_TYPE = 1 PRINTER_NOTIFY_INFO_DISCARDED = 1 PRINTER_NOTIFY_OPTIONS_REFRESH = 1 PRINTER_NOTIFY_MAX_NOTIFICATIONS = 0xffff JOB_STATUS_PAUSED = 0x00000001 // Job is paused JOB_STATUS_ERROR = 0x00000002 // An error is associated with the job JOB_STATUS_DELETING = 0x00000004 // Job is being deleted JOB_STATUS_SPOOLING = 0x00000008 // Job is spooling JOB_STATUS_PRINTING = 0x00000010 // Job is printing JOB_STATUS_OFFLINE = 0x00000020 // Printer is offline JOB_STATUS_PAPEROUT = 0x00000040 // Printer is out of paper JOB_STATUS_PRINTED = 0x00000080 // Job has printed JOB_STATUS_DELETED = 0x00000100 // Job has been deleted JOB_STATUS_BLOCKED_DEVQ = 0x00000200 // Printer driver cannot print the job JOB_STATUS_USER_INTERVENTION = 0x00000400 // User action required JOB_STATUS_RESTART = 0x00000800 // Job has been restarted JOB_STATUS_COMPLETE = 0x00001000 // Job has been delivered to the printer JOB_STATUS_RETAINED = 0x00002000 // Job has been retained in the print queue JOB_STATUS_RENDERING_LOCALLY = 0x00004000 // Job rendering locally on the client JOB_CONTROL_PAUSE = 1 JOB_CONTROL_RESUME = 2 JOB_CONTROL_CANCEL = 3 JOB_CONTROL_RESTART = 4 JOB_CONTROL_DELETE = 5 JOB_CONTROL_SENT_TO_PRINTER = 6 JOB_CONTROL_LAST_PAGE_EJECTED = 7 JOB_CONTROL_RETAIN = 8 JOB_CONTROL_RELEASE = 9 JOB_POSITION_UNSPECIFIED = 0 )
Variables ¶
var ErrNoNotification = errors.New("no notification information")
var JobNotifyAll = []uint16{ JOB_NOTIFY_FIELD_PRINTER_NAME, JOB_NOTIFY_FIELD_MACHINE_NAME, JOB_NOTIFY_FIELD_PORT_NAME, JOB_NOTIFY_FIELD_USER_NAME, JOB_NOTIFY_FIELD_NOTIFY_NAME, JOB_NOTIFY_FIELD_DATATYPE, JOB_NOTIFY_FIELD_PRINT_PROCESSOR, JOB_NOTIFY_FIELD_PARAMETERS, JOB_NOTIFY_FIELD_DRIVER_NAME, JOB_NOTIFY_FIELD_DEVMODE, JOB_NOTIFY_FIELD_STATUS, JOB_NOTIFY_FIELD_STATUS_STRING, JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR, JOB_NOTIFY_FIELD_DOCUMENT, JOB_NOTIFY_FIELD_PRIORITY, JOB_NOTIFY_FIELD_POSITION, JOB_NOTIFY_FIELD_SUBMITTED, JOB_NOTIFY_FIELD_START_TIME, JOB_NOTIFY_FIELD_UNTIL_TIME, JOB_NOTIFY_FIELD_TIME, JOB_NOTIFY_FIELD_TOTAL_PAGES, JOB_NOTIFY_FIELD_PAGES_PRINTED, JOB_NOTIFY_FIELD_TOTAL_BYTES, JOB_NOTIFY_FIELD_BYTES_PRINTED, JOB_NOTIFY_FIELD_REMOTE_JOB_ID, }
JobNotifyAll is a util providing a slice of all JOB_NOTIFY_FIELD_* values
Functions ¶
func ClosePrinter ¶
func EndDocPrinter ¶
func EndPagePrinter ¶
func EnumPrinters ¶
func FindNextPrinterChangeNotification ¶
func FindNextPrinterChangeNotification(h syscall.Handle, cause *uint16, options *PRINTER_NOTIFY_OPTIONS, info **PRINTER_NOTIFY_INFO) (err error)
func FreePrinterNotifyInfo ¶
func FreePrinterNotifyInfo(info *PRINTER_NOTIFY_INFO) (err error)
func GetDefaultPrinter ¶
func GetPrinter ¶
func GetPrinterDriver ¶
func JobNotifyFieldToString ¶
JobNotifyFieldToString maps all JOB_NOTIFY_FIELD_* values to a human readable string
func StartDocPrinter ¶
func StartPagePrinter ¶
Types ¶
type ChangeNotificationHandle ¶
type ChangeNotificationHandle struct {
// contains filtered or unexported fields
}
ChangeNotificationHandle wraps the change notification object created by Printer::ChangeNotifications
func (*ChangeNotificationHandle) Close ¶
func (c *ChangeNotificationHandle) Close() error
Close closes the change notification handle, wrapping FindClosePrinterChangeNotification see https://docs.microsoft.com/en-us/windows/desktop/printdocs/findcloseprinterchangenotification
func (*ChangeNotificationHandle) Next ¶
func (c *ChangeNotificationHandle) Next(printerNotifyOptions *PRINTER_NOTIFY_OPTIONS) (*NotifyInfo, error)
Next retrieves information about the most recent change notification for a change notification object associated with a printer or print server It effectively wraps FindNextPrinterChangeNotification see https://docs.microsoft.com/en-us/windows/desktop/printdocs/findnextprinterchangenotification
type DOC_INFO_1 ¶
type DRIVER_INFO_8 ¶
type DRIVER_INFO_8 struct { Version uint32 Name *uint16 Environment *uint16 DriverPath *uint16 DataFile *uint16 ConfigFile *uint16 HelpFile *uint16 DependentFiles *uint16 MonitorName *uint16 DefaultDataType *uint16 PreviousNames *uint16 DriverDate syscall.Filetime DriverVersion uint64 MfgName *uint16 OEMUrl *uint16 HardwareID *uint16 Provider *uint16 PrintProcessor *uint16 VendorSetup *uint16 ColorProfiles *uint16 InfPath *uint16 PrinterDriverAttributes uint32 CoreDriverDependencies *uint16 MinInboxDriverVerDate syscall.Filetime MinInboxDriverVerVersion uint32 }
type DriverInfo ¶
DriverInfo stores information about printer driver.
type Info ¶
type Info struct { PrinterName string PortName string Attributes uint32 DeviceNotSelectedTimeout uint32 TransmissionRetryTimeout uint32 }
PRINTER_INFO_5 as a Golang struct
type JOB_INFO_4 ¶
type JOB_INFO_4 struct { JobID uint32 PrinterName *uint16 MachineName *uint16 UserName *uint16 Document *uint16 NotifyName *uint16 DataType *uint16 PrintProcessor *uint16 Parameters *uint16 DriverName *uint16 Devmode unsafe.Pointer Status *uint16 SecurityDescriptor unsafe.Pointer StatusCode uint32 Priority uint32 Position uint32 StartTime uint32 UntilTime uint32 TotalPages uint32 Size uint32 Submitted syscall.Systemtime Time uint32 PagesPrinted uint32 SizeHigh uint32 }
func (*JOB_INFO_4) ToJobInfo ¶
func (j *JOB_INFO_4) ToJobInfo() *JobInfo
type JobInfo ¶
type JobInfo struct { JobID uint32 // a job identifier value PrinterName string // the name of the printer for which the job is spooled UserMachineName string // the name of the machine that created the print job UserName string // the name of the user who owns the print job DocumentName string // the name of the print job (for example, "MS-WORD: Review.doc") NotifyName string // the name of the user who should be notified when the job has been printed or when an error occurs while printing the job DataType string // the type of data used to record the print job PrintProcessor string // the name of the print processor that should be used to print the job Parameters string // print-processor parameters DriverName string // the name of the printer driver that should be used to process the print job Status string // the status of the print job. This member should be checked prior to StatusCode and takes precedence over it StatusCode uint32 // the job status as a bitmap of JOB_STATUS_* constants Priority uint32 // the job priority. This member can be one of the following values or in the range between 1 through 99 (MIN_PRIORITY through MAX_PRIORITY) Position uint32 // the job's position in the print queue StartTime uint32 // the earliest time that the job can be printed UntilTime uint32 // the latest time that the job can be printed TotalPages uint32 // the number of pages required for the job. This value may be zero if the print job does not contain page delimiting information Size uint64 // the size, in bytes, of the job. Time time.Duration // the total time, in milliseconds, that has elapsed since the job began printing PagesPrinted uint32 // the number of pages that have printed. This value may be zero if the print job does not contain page delimiting information Submitted time.Time // the time when the job was submitted }
JobInfo stores information about a print job.
type NOTIFY_DATA ¶
type NotifyInfo ¶
type NotifyInfo struct { Version int Flags uint Cause uint Data []*NotifyInfoData }
NotifyInfo is a golang friendly PRINTER_NOTIFY_INFO struct see https://docs.microsoft.com/en-us/windows/desktop/printdocs/printer-notify-info
func (*NotifyInfo) String ¶
func (pni *NotifyInfo) String() string
type NotifyInfoData ¶
type NotifyInfoData struct { Type uint16 // one of PRINTER_NOTIFY_TYPE or JOB_NOTIFY_TYPE Field uint16 // JOB_NOTIFY_FIELD_* or PRINTER_NOTIFY_FIELD_* depending on the above ID uint32 // if JOB_NOTIFY_TYPE, this is the print job ID Value interface{} }
NotifyInfoData is a golang friendly PRINTER_NOTIFY_INFO_DATA notably the union is now expressed as an interface{} type See https://docs.microsoft.com/en-us/windows/desktop/printdocs/printer-notify-info-data
func (*NotifyInfoData) String ¶
func (pnid *NotifyInfoData) String() string
type PRINTER_INFO_5 ¶
type PRINTER_NOTIFY_INFO ¶
type PRINTER_NOTIFY_INFO struct { Version uint32 Flags uint32 Count uint32 PData [PRINTER_NOTIFY_MAX_NOTIFICATIONS]PRINTER_NOTIFY_INFO_DATA }
func (*PRINTER_NOTIFY_INFO) ToNotifyInfo ¶
func (pni *PRINTER_NOTIFY_INFO) ToNotifyInfo() *NotifyInfo
ToNotifyInfo converts the C-like PRINTER_NOTIFY_INFO struct to a more Golang friendly NotifyInfo
type PRINTER_NOTIFY_INFO_DATA ¶
type PRINTER_NOTIFY_INFO_DATA struct { Type uint16 Field uint16 Reserved uint32 ID uint32 NotifyData NOTIFY_DATA }
func (*PRINTER_NOTIFY_INFO_DATA) ToNotifyInfoData ¶
func (pnid *PRINTER_NOTIFY_INFO_DATA) ToNotifyInfoData() *NotifyInfoData
ToNotifyInfoData converts the C-like PRINTER_NOTIFY_INFO_DATA struct to a more Golang friendly NotifyInfoData
type PRINTER_NOTIFY_OPTIONS ¶
type PRINTER_NOTIFY_OPTIONS struct { Version uint32 Flags uint32 Count uint32 PTypes *PRINTER_NOTIFY_OPTIONS_TYPE }
type Printer ¶
type Printer struct {
// contains filtered or unexported fields
}
func (*Printer) ChangeNotifications ¶
func (p *Printer) ChangeNotifications(filter uint32, options uint32, printerNotifyOptions *PRINTER_NOTIFY_OPTIONS) (*ChangeNotificationHandle, error)
ChangeNotifications gets a handle that can be used to query for spooler notifications. It effectively wraps FindFirstPrinterChangeNotification see https://docs.microsoft.com/en-us/windows/desktop/printdocs/findfirstprinterchangenotification
func (*Printer) DriverInfo ¶
func (p *Printer) DriverInfo() (*DriverInfo, error)
DriverInfo returns information about a printer's driver.
func (*Printer) EndDocument ¶
func (*Printer) GetNotifications ¶
func (p *Printer) GetNotifications(done <-chan struct{}, filter uint32, options uint32, printerNotifyOptions *PRINTER_NOTIFY_OPTIONS) (<-chan *NotifyInfo, error)
GetNotifications wraps the whole FindFirstPrinterChangeNotification, WaitForSingleObject, FindNextPrinterChangeNotification, FindClosePrinterChangeNotification process and vends notifications out of a channel To finish notifications and cleanup, close the passed in done channel
func (*Printer) PrinterInfo ¶
PrinterInfo returns information about a printer
func (*Printer) StartDocument ¶
StartDocument wraps StartDocPrinter windows API call Empty strings translate to NULL arguments in DOC_INFO_1 returns job id of new job, if no error
func (*Printer) StartRawDocument ¶
StartRawDocument calls StartDocument and passes either "RAW" or "XPS_PASS" as a document type, depending if printer driver is XPS-based or not. returns job id of new job, if no error