go-tg-screenshot-bot

Форк
0
300 строк · 7.3 Кб
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
// Common error codes
16
const (
17
	CDERR_DIALOGFAILURE   = 0xFFFF
18
	CDERR_FINDRESFAILURE  = 0x0006
19
	CDERR_INITIALIZATION  = 0x0002
20
	CDERR_LOADRESFAILURE  = 0x0007
21
	CDERR_LOADSTRFAILURE  = 0x0005
22
	CDERR_LOCKRESFAILURE  = 0x0008
23
	CDERR_MEMALLOCFAILURE = 0x0009
24
	CDERR_MEMLOCKFAILURE  = 0x000A
25
	CDERR_NOHINSTANCE     = 0x0004
26
	CDERR_NOHOOK          = 0x000B
27
	CDERR_NOTEMPLATE      = 0x0003
28
	CDERR_REGISTERMSGFAIL = 0x000C
29
	CDERR_STRUCTSIZE      = 0x0001
30
)
31

32
// CHOOSECOLOR flags
33
const (
34
	CC_ANYCOLOR             = 0x00000100
35
	CC_ENABLEHOOK           = 0x00000010
36
	CC_ENABLETEMPLATE       = 0x00000020
37
	CC_ENABLETEMPLATEHANDLE = 0x00000040
38
	CC_FULLOPEN             = 0x00000002
39
	CC_PREVENTFULLOPEN      = 0x00000004
40
	CC_RGBINIT              = 0x00000001
41
	CC_SHOWHELP             = 0x00000008
42
	CC_SOLIDCOLOR           = 0x00000080
43
)
44

45
type CHOOSECOLOR struct {
46
	LStructSize    uint32
47
	HwndOwner      HWND
48
	HInstance      HWND
49
	RgbResult      COLORREF
50
	LpCustColors   *[16]COLORREF
51
	Flags          uint32
52
	LCustData      uintptr
53
	LpfnHook       uintptr
54
	LpTemplateName *uint16
55
}
56

57
// PrintDlg specific error codes
58
const (
59
	PDERR_CREATEICFAILURE  = 0x100A
60
	PDERR_DEFAULTDIFFERENT = 0x100C
61
	PDERR_DNDMMISMATCH     = 0x1009
62
	PDERR_GETDEVMODEFAIL   = 0x1005
63
	PDERR_INITFAILURE      = 0x1006
64
	PDERR_LOADDRVFAILURE   = 0x1004
65
	PDERR_NODEFAULTPRN     = 0x1008
66
	PDERR_NODEVICES        = 0x1007
67
	PDERR_PARSEFAILURE     = 0x1002
68
	PDERR_PRINTERNOTFOUND  = 0x100B
69
	PDERR_RETDEFFAILURE    = 0x1003
70
	PDERR_SETUPFAILURE     = 0x1001
71
)
72

73
// ChooseFont specific error codes
74
const (
75
	CFERR_MAXLESSTHANMIN = 0x2002
76
	CFERR_NOFONTS        = 0x2001
77
)
78

79
// GetOpenFileName and GetSaveFileName specific error codes
80
const (
81
	FNERR_BUFFERTOOSMALL  = 0x3003
82
	FNERR_INVALIDFILENAME = 0x3002
83
	FNERR_SUBCLASSFAILURE = 0x3001
84
)
85

86
// FindText and ReplaceText specific error codes
87
const (
88
	FRERR_BUFFERLENGTHZERO = 0x4001
89
)
90

91
// GetOpenFileName and GetSaveFileName flags
92
const (
93
	OFN_ALLOWMULTISELECT     = 0x00000200
94
	OFN_CREATEPROMPT         = 0x00002000
95
	OFN_DONTADDTORECENT      = 0x02000000
96
	OFN_ENABLEHOOK           = 0x00000020
97
	OFN_ENABLEINCLUDENOTIFY  = 0x00400000
98
	OFN_ENABLESIZING         = 0x00800000
99
	OFN_ENABLETEMPLATE       = 0x00000040
100
	OFN_ENABLETEMPLATEHANDLE = 0x00000080
101
	OFN_EXPLORER             = 0x00080000
102
	OFN_EXTENSIONDIFFERENT   = 0x00000400
103
	OFN_FILEMUSTEXIST        = 0x00001000
104
	OFN_FORCESHOWHIDDEN      = 0x10000000
105
	OFN_HIDEREADONLY         = 0x00000004
106
	OFN_LONGNAMES            = 0x00200000
107
	OFN_NOCHANGEDIR          = 0x00000008
108
	OFN_NODEREFERENCELINKS   = 0x00100000
109
	OFN_NOLONGNAMES          = 0x00040000
110
	OFN_NONETWORKBUTTON      = 0x00020000
111
	OFN_NOREADONLYRETURN     = 0x00008000
112
	OFN_NOTESTFILECREATE     = 0x00010000
113
	OFN_NOVALIDATE           = 0x00000100
114
	OFN_OVERWRITEPROMPT      = 0x00000002
115
	OFN_PATHMUSTEXIST        = 0x00000800
116
	OFN_READONLY             = 0x00000001
117
	OFN_SHAREAWARE           = 0x00004000
118
	OFN_SHOWHELP             = 0x00000010
119
)
120

121
// GetOpenFileName and GetSaveFileName extended flags
122
const (
123
	OFN_EX_NOPLACESBAR = 0x00000001
124
)
125

126
// PrintDlg[Ex] result actions
127
const (
128
	PD_RESULT_APPLY  = 2
129
	PD_RESULT_CANCEL = 0
130
	PD_RESULT_PRINT  = 1
131
)
132

133
// PrintDlg[Ex] flags
134
const (
135
	PD_ALLPAGES                   = 0x00000000
136
	PD_COLLATE                    = 0x00000010
137
	PD_CURRENTPAGE                = 0x00400000
138
	PD_DISABLEPRINTTOFILE         = 0x00080000
139
	PD_ENABLEPRINTTEMPLATE        = 0x00004000
140
	PD_ENABLEPRINTTEMPLATEHANDLE  = 0x00010000
141
	PD_EXCLUSIONFLAGS             = 0x01000000
142
	PD_HIDEPRINTTOFILE            = 0x00100000
143
	PD_NOCURRENTPAGE              = 0x00800000
144
	PD_NOPAGENUMS                 = 0x00000008
145
	PD_NOSELECTION                = 0x00000004
146
	PD_NOWARNING                  = 0x00000080
147
	PD_PAGENUMS                   = 0x00000002
148
	PD_PRINTTOFILE                = 0x00000020
149
	PD_RETURNDC                   = 0x00000100
150
	PD_RETURNDEFAULT              = 0x00000400
151
	PD_RETURNIC                   = 0x00000200
152
	PD_SELECTION                  = 0x00000001
153
	PD_USEDEVMODECOPIES           = 0x00040000
154
	PD_USEDEVMODECOPIESANDCOLLATE = 0x00040000
155
	PD_USELARGETEMPLATE           = 0x10000000
156
)
157

158
// PrintDlgEx exclusion flags
159
const (
160
	PD_EXCL_COPIESANDCOLLATE = DM_COPIES | DM_COLLATE
161
)
162

163
const START_PAGE_GENERAL = 0xffffffff
164

165
type (
166
	LPOFNHOOKPROC  uintptr
167
	HPROPSHEETPAGE HANDLE
168
	LPUNKNOWN      uintptr
169
)
170

171
type OPENFILENAME struct {
172
	LStructSize       uint32
173
	HwndOwner         HWND
174
	HInstance         HINSTANCE
175
	LpstrFilter       *uint16
176
	LpstrCustomFilter *uint16
177
	NMaxCustFilter    uint32
178
	NFilterIndex      uint32
179
	LpstrFile         *uint16
180
	NMaxFile          uint32
181
	LpstrFileTitle    *uint16
182
	NMaxFileTitle     uint32
183
	LpstrInitialDir   *uint16
184
	LpstrTitle        *uint16
185
	Flags             uint32
186
	NFileOffset       uint16
187
	NFileExtension    uint16
188
	LpstrDefExt       *uint16
189
	LCustData         uintptr
190
	LpfnHook          LPOFNHOOKPROC
191
	LpTemplateName    *uint16
192
	PvReserved        unsafe.Pointer
193
	DwReserved        uint32
194
	FlagsEx           uint32
195
}
196

197
type PRINTPAGERANGE struct {
198
	NFromPage uint32
199
	NToPage   uint32
200
}
201

202
type DEVNAMES struct {
203
	WDriverOffset uint16
204
	WDeviceOffset uint16
205
	WOutputOffset uint16
206
	WDefault      uint16
207
}
208

209
type PRINTDLGEX struct {
210
	LStructSize         uint32
211
	HwndOwner           HWND
212
	HDevMode            HGLOBAL
213
	HDevNames           HGLOBAL
214
	HDC                 HDC
215
	Flags               uint32
216
	Flags2              uint32
217
	ExclusionFlags      uint32
218
	NPageRanges         uint32
219
	NMaxPageRanges      uint32
220
	LpPageRanges        *PRINTPAGERANGE
221
	NMinPage            uint32
222
	NMaxPage            uint32
223
	NCopies             uint32
224
	HInstance           HINSTANCE
225
	LpPrintTemplateName *uint16
226
	LpCallback          LPUNKNOWN
227
	NPropertyPages      uint32
228
	LphPropertyPages    *HPROPSHEETPAGE
229
	NStartPage          uint32
230
	DwResultAction      uint32
231
}
232

233
var (
234
	// Library
235
	libcomdlg32 *windows.LazyDLL
236

237
	// Functions
238
	chooseColor          *windows.LazyProc
239
	commDlgExtendedError *windows.LazyProc
240
	getOpenFileName      *windows.LazyProc
241
	getSaveFileName      *windows.LazyProc
242
	printDlgEx           *windows.LazyProc
243
)
244

245
func init() {
246
	// Library
247
	libcomdlg32 = windows.NewLazySystemDLL("comdlg32.dll")
248

249
	// Functions
250
	chooseColor = libcomdlg32.NewProc("ChooseColorW")
251
	commDlgExtendedError = libcomdlg32.NewProc("CommDlgExtendedError")
252
	getOpenFileName = libcomdlg32.NewProc("GetOpenFileNameW")
253
	getSaveFileName = libcomdlg32.NewProc("GetSaveFileNameW")
254
	printDlgEx = libcomdlg32.NewProc("PrintDlgExW")
255
}
256

257
func ChooseColor(lpcc *CHOOSECOLOR) bool {
258
	ret, _, _ := syscall.Syscall(chooseColor.Addr(), 1,
259
		uintptr(unsafe.Pointer(lpcc)),
260
		0,
261
		0)
262

263
	return ret != 0
264
}
265

266
func CommDlgExtendedError() uint32 {
267
	ret, _, _ := syscall.Syscall(commDlgExtendedError.Addr(), 0,
268
		0,
269
		0,
270
		0)
271

272
	return uint32(ret)
273
}
274

275
func GetOpenFileName(lpofn *OPENFILENAME) bool {
276
	ret, _, _ := syscall.Syscall(getOpenFileName.Addr(), 1,
277
		uintptr(unsafe.Pointer(lpofn)),
278
		0,
279
		0)
280

281
	return ret != 0
282
}
283

284
func GetSaveFileName(lpofn *OPENFILENAME) bool {
285
	ret, _, _ := syscall.Syscall(getSaveFileName.Addr(), 1,
286
		uintptr(unsafe.Pointer(lpofn)),
287
		0,
288
		0)
289

290
	return ret != 0
291
}
292

293
func PrintDlgEx(lppd *PRINTDLGEX) HRESULT {
294
	ret, _, _ := syscall.Syscall(printDlgEx.Addr(), 1,
295
		uintptr(unsafe.Pointer(lppd)),
296
		0,
297
		0)
298

299
	return HRESULT(ret)
300
}
301

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

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

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

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