go-tg-screenshot-bot
101 строка · 2.6 Кб
1// Copyright 2010 The win Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// +build windows
6
7package win8
9import (10"golang.org/x/sys/windows"11"syscall"12"unsafe"13)
14
15// EnumPrinters flags
16const (17PRINTER_ENUM_DEFAULT = 0x0000000118PRINTER_ENUM_LOCAL = 0x0000000219PRINTER_ENUM_CONNECTIONS = 0x0000000420PRINTER_ENUM_FAVORITE = 0x0000000421PRINTER_ENUM_NAME = 0x0000000822PRINTER_ENUM_REMOTE = 0x0000001023PRINTER_ENUM_SHARED = 0x0000002024PRINTER_ENUM_NETWORK = 0x0000004025)
26
27type PRINTER_INFO_4 struct {28PPrinterName *uint1629PServerName *uint1630Attributes uint3231}
32
33var (34// Library35libwinspool *windows.LazyDLL36
37// Functions38deviceCapabilities *windows.LazyProc39documentProperties *windows.LazyProc40enumPrinters *windows.LazyProc41getDefaultPrinter *windows.LazyProc42)
43
44func init() {45// Library46libwinspool = windows.NewLazySystemDLL("winspool.drv")47
48// Functions49deviceCapabilities = libwinspool.NewProc("DeviceCapabilitiesW")50documentProperties = libwinspool.NewProc("DocumentPropertiesW")51enumPrinters = libwinspool.NewProc("EnumPrintersW")52getDefaultPrinter = libwinspool.NewProc("GetDefaultPrinterW")53}
54
55func DeviceCapabilities(pDevice, pPort *uint16, fwCapability uint16, pOutput *uint16, pDevMode *DEVMODE) uint32 {56ret, _, _ := syscall.Syscall6(deviceCapabilities.Addr(), 5,57uintptr(unsafe.Pointer(pDevice)),58uintptr(unsafe.Pointer(pPort)),59uintptr(fwCapability),60uintptr(unsafe.Pointer(pOutput)),61uintptr(unsafe.Pointer(pDevMode)),620)63
64return uint32(ret)65}
66
67func DocumentProperties(hWnd HWND, hPrinter HANDLE, pDeviceName *uint16, pDevModeOutput, pDevModeInput *DEVMODE, fMode uint32) int32 {68ret, _, _ := syscall.Syscall6(documentProperties.Addr(), 6,69uintptr(hWnd),70uintptr(hPrinter),71uintptr(unsafe.Pointer(pDeviceName)),72uintptr(unsafe.Pointer(pDevModeOutput)),73uintptr(unsafe.Pointer(pDevModeInput)),74uintptr(fMode))75
76return int32(ret)77}
78
79func EnumPrinters(Flags uint32, Name *uint16, Level uint32, pPrinterEnum *byte, cbBuf uint32, pcbNeeded, pcReturned *uint32) bool {80ret, _, _ := syscall.Syscall9(enumPrinters.Addr(), 7,81uintptr(Flags),82uintptr(unsafe.Pointer(Name)),83uintptr(Level),84uintptr(unsafe.Pointer(pPrinterEnum)),85uintptr(cbBuf),86uintptr(unsafe.Pointer(pcbNeeded)),87uintptr(unsafe.Pointer(pcReturned)),880,890)90
91return ret != 092}
93
94func GetDefaultPrinter(pszBuffer *uint16, pcchBuffer *uint32) bool {95ret, _, _ := syscall.Syscall(getDefaultPrinter.Addr(), 2,96uintptr(unsafe.Pointer(pszBuffer)),97uintptr(unsafe.Pointer(pcchBuffer)),980)99
100return ret != 0101}
102