go-tg-screenshot-bot

Форк
0
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

7
package win
8

9
import (
10
	"golang.org/x/sys/windows"
11
	"syscall"
12
	"unsafe"
13
)
14

15
// EnumPrinters flags
16
const (
17
	PRINTER_ENUM_DEFAULT     = 0x00000001
18
	PRINTER_ENUM_LOCAL       = 0x00000002
19
	PRINTER_ENUM_CONNECTIONS = 0x00000004
20
	PRINTER_ENUM_FAVORITE    = 0x00000004
21
	PRINTER_ENUM_NAME        = 0x00000008
22
	PRINTER_ENUM_REMOTE      = 0x00000010
23
	PRINTER_ENUM_SHARED      = 0x00000020
24
	PRINTER_ENUM_NETWORK     = 0x00000040
25
)
26

27
type PRINTER_INFO_4 struct {
28
	PPrinterName *uint16
29
	PServerName  *uint16
30
	Attributes   uint32
31
}
32

33
var (
34
	// Library
35
	libwinspool *windows.LazyDLL
36

37
	// Functions
38
	deviceCapabilities *windows.LazyProc
39
	documentProperties *windows.LazyProc
40
	enumPrinters       *windows.LazyProc
41
	getDefaultPrinter  *windows.LazyProc
42
)
43

44
func init() {
45
	// Library
46
	libwinspool = windows.NewLazySystemDLL("winspool.drv")
47

48
	// Functions
49
	deviceCapabilities = libwinspool.NewProc("DeviceCapabilitiesW")
50
	documentProperties = libwinspool.NewProc("DocumentPropertiesW")
51
	enumPrinters = libwinspool.NewProc("EnumPrintersW")
52
	getDefaultPrinter = libwinspool.NewProc("GetDefaultPrinterW")
53
}
54

55
func DeviceCapabilities(pDevice, pPort *uint16, fwCapability uint16, pOutput *uint16, pDevMode *DEVMODE) uint32 {
56
	ret, _, _ := syscall.Syscall6(deviceCapabilities.Addr(), 5,
57
		uintptr(unsafe.Pointer(pDevice)),
58
		uintptr(unsafe.Pointer(pPort)),
59
		uintptr(fwCapability),
60
		uintptr(unsafe.Pointer(pOutput)),
61
		uintptr(unsafe.Pointer(pDevMode)),
62
		0)
63

64
	return uint32(ret)
65
}
66

67
func DocumentProperties(hWnd HWND, hPrinter HANDLE, pDeviceName *uint16, pDevModeOutput, pDevModeInput *DEVMODE, fMode uint32) int32 {
68
	ret, _, _ := syscall.Syscall6(documentProperties.Addr(), 6,
69
		uintptr(hWnd),
70
		uintptr(hPrinter),
71
		uintptr(unsafe.Pointer(pDeviceName)),
72
		uintptr(unsafe.Pointer(pDevModeOutput)),
73
		uintptr(unsafe.Pointer(pDevModeInput)),
74
		uintptr(fMode))
75

76
	return int32(ret)
77
}
78

79
func EnumPrinters(Flags uint32, Name *uint16, Level uint32, pPrinterEnum *byte, cbBuf uint32, pcbNeeded, pcReturned *uint32) bool {
80
	ret, _, _ := syscall.Syscall9(enumPrinters.Addr(), 7,
81
		uintptr(Flags),
82
		uintptr(unsafe.Pointer(Name)),
83
		uintptr(Level),
84
		uintptr(unsafe.Pointer(pPrinterEnum)),
85
		uintptr(cbBuf),
86
		uintptr(unsafe.Pointer(pcbNeeded)),
87
		uintptr(unsafe.Pointer(pcReturned)),
88
		0,
89
		0)
90

91
	return ret != 0
92
}
93

94
func GetDefaultPrinter(pszBuffer *uint16, pcchBuffer *uint32) bool {
95
	ret, _, _ := syscall.Syscall(getDefaultPrinter.Addr(), 2,
96
		uintptr(unsafe.Pointer(pszBuffer)),
97
		uintptr(unsafe.Pointer(pcchBuffer)),
98
		0)
99

100
	return ret != 0
101
}
102

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.