go-tg-screenshot-bot
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
7package win8
9import (10"golang.org/x/sys/windows"11"syscall"12"unsafe"13)
14
15// Common error codes
16const (17CDERR_DIALOGFAILURE = 0xFFFF18CDERR_FINDRESFAILURE = 0x000619CDERR_INITIALIZATION = 0x000220CDERR_LOADRESFAILURE = 0x000721CDERR_LOADSTRFAILURE = 0x000522CDERR_LOCKRESFAILURE = 0x000823CDERR_MEMALLOCFAILURE = 0x000924CDERR_MEMLOCKFAILURE = 0x000A25CDERR_NOHINSTANCE = 0x000426CDERR_NOHOOK = 0x000B27CDERR_NOTEMPLATE = 0x000328CDERR_REGISTERMSGFAIL = 0x000C29CDERR_STRUCTSIZE = 0x000130)
31
32// CHOOSECOLOR flags
33const (34CC_ANYCOLOR = 0x0000010035CC_ENABLEHOOK = 0x0000001036CC_ENABLETEMPLATE = 0x0000002037CC_ENABLETEMPLATEHANDLE = 0x0000004038CC_FULLOPEN = 0x0000000239CC_PREVENTFULLOPEN = 0x0000000440CC_RGBINIT = 0x0000000141CC_SHOWHELP = 0x0000000842CC_SOLIDCOLOR = 0x0000008043)
44
45type CHOOSECOLOR struct {46LStructSize uint3247HwndOwner HWND
48HInstance HWND
49RgbResult COLORREF
50LpCustColors *[16]COLORREF51Flags uint3252LCustData uintptr53LpfnHook uintptr54LpTemplateName *uint1655}
56
57// PrintDlg specific error codes
58const (59PDERR_CREATEICFAILURE = 0x100A60PDERR_DEFAULTDIFFERENT = 0x100C61PDERR_DNDMMISMATCH = 0x100962PDERR_GETDEVMODEFAIL = 0x100563PDERR_INITFAILURE = 0x100664PDERR_LOADDRVFAILURE = 0x100465PDERR_NODEFAULTPRN = 0x100866PDERR_NODEVICES = 0x100767PDERR_PARSEFAILURE = 0x100268PDERR_PRINTERNOTFOUND = 0x100B69PDERR_RETDEFFAILURE = 0x100370PDERR_SETUPFAILURE = 0x100171)
72
73// ChooseFont specific error codes
74const (75CFERR_MAXLESSTHANMIN = 0x200276CFERR_NOFONTS = 0x200177)
78
79// GetOpenFileName and GetSaveFileName specific error codes
80const (81FNERR_BUFFERTOOSMALL = 0x300382FNERR_INVALIDFILENAME = 0x300283FNERR_SUBCLASSFAILURE = 0x300184)
85
86// FindText and ReplaceText specific error codes
87const (88FRERR_BUFFERLENGTHZERO = 0x400189)
90
91// GetOpenFileName and GetSaveFileName flags
92const (93OFN_ALLOWMULTISELECT = 0x0000020094OFN_CREATEPROMPT = 0x0000200095OFN_DONTADDTORECENT = 0x0200000096OFN_ENABLEHOOK = 0x0000002097OFN_ENABLEINCLUDENOTIFY = 0x0040000098OFN_ENABLESIZING = 0x0080000099OFN_ENABLETEMPLATE = 0x00000040100OFN_ENABLETEMPLATEHANDLE = 0x00000080101OFN_EXPLORER = 0x00080000102OFN_EXTENSIONDIFFERENT = 0x00000400103OFN_FILEMUSTEXIST = 0x00001000104OFN_FORCESHOWHIDDEN = 0x10000000105OFN_HIDEREADONLY = 0x00000004106OFN_LONGNAMES = 0x00200000107OFN_NOCHANGEDIR = 0x00000008108OFN_NODEREFERENCELINKS = 0x00100000109OFN_NOLONGNAMES = 0x00040000110OFN_NONETWORKBUTTON = 0x00020000111OFN_NOREADONLYRETURN = 0x00008000112OFN_NOTESTFILECREATE = 0x00010000113OFN_NOVALIDATE = 0x00000100114OFN_OVERWRITEPROMPT = 0x00000002115OFN_PATHMUSTEXIST = 0x00000800116OFN_READONLY = 0x00000001117OFN_SHAREAWARE = 0x00004000118OFN_SHOWHELP = 0x00000010119)
120
121// GetOpenFileName and GetSaveFileName extended flags
122const (123OFN_EX_NOPLACESBAR = 0x00000001124)
125
126// PrintDlg[Ex] result actions
127const (128PD_RESULT_APPLY = 2129PD_RESULT_CANCEL = 0130PD_RESULT_PRINT = 1131)
132
133// PrintDlg[Ex] flags
134const (135PD_ALLPAGES = 0x00000000136PD_COLLATE = 0x00000010137PD_CURRENTPAGE = 0x00400000138PD_DISABLEPRINTTOFILE = 0x00080000139PD_ENABLEPRINTTEMPLATE = 0x00004000140PD_ENABLEPRINTTEMPLATEHANDLE = 0x00010000141PD_EXCLUSIONFLAGS = 0x01000000142PD_HIDEPRINTTOFILE = 0x00100000143PD_NOCURRENTPAGE = 0x00800000144PD_NOPAGENUMS = 0x00000008145PD_NOSELECTION = 0x00000004146PD_NOWARNING = 0x00000080147PD_PAGENUMS = 0x00000002148PD_PRINTTOFILE = 0x00000020149PD_RETURNDC = 0x00000100150PD_RETURNDEFAULT = 0x00000400151PD_RETURNIC = 0x00000200152PD_SELECTION = 0x00000001153PD_USEDEVMODECOPIES = 0x00040000154PD_USEDEVMODECOPIESANDCOLLATE = 0x00040000155PD_USELARGETEMPLATE = 0x10000000156)
157
158// PrintDlgEx exclusion flags
159const (160PD_EXCL_COPIESANDCOLLATE = DM_COPIES | DM_COLLATE161)
162
163const START_PAGE_GENERAL = 0xffffffff164
165type (166LPOFNHOOKPROC uintptr167HPROPSHEETPAGE HANDLE
168LPUNKNOWN uintptr169)
170
171type OPENFILENAME struct {172LStructSize uint32173HwndOwner HWND
174HInstance HINSTANCE
175LpstrFilter *uint16176LpstrCustomFilter *uint16177NMaxCustFilter uint32178NFilterIndex uint32179LpstrFile *uint16180NMaxFile uint32181LpstrFileTitle *uint16182NMaxFileTitle uint32183LpstrInitialDir *uint16184LpstrTitle *uint16185Flags uint32186NFileOffset uint16187NFileExtension uint16188LpstrDefExt *uint16189LCustData uintptr190LpfnHook LPOFNHOOKPROC
191LpTemplateName *uint16192PvReserved unsafe.Pointer193DwReserved uint32194FlagsEx uint32195}
196
197type PRINTPAGERANGE struct {198NFromPage uint32199NToPage uint32200}
201
202type DEVNAMES struct {203WDriverOffset uint16204WDeviceOffset uint16205WOutputOffset uint16206WDefault uint16207}
208
209type PRINTDLGEX struct {210LStructSize uint32211HwndOwner HWND
212HDevMode HGLOBAL
213HDevNames HGLOBAL
214HDC HDC
215Flags uint32216Flags2 uint32217ExclusionFlags uint32218NPageRanges uint32219NMaxPageRanges uint32220LpPageRanges *PRINTPAGERANGE221NMinPage uint32222NMaxPage uint32223NCopies uint32224HInstance HINSTANCE
225LpPrintTemplateName *uint16226LpCallback LPUNKNOWN
227NPropertyPages uint32228LphPropertyPages *HPROPSHEETPAGE229NStartPage uint32230DwResultAction uint32231}
232
233var (234// Library235libcomdlg32 *windows.LazyDLL236
237// Functions238chooseColor *windows.LazyProc239commDlgExtendedError *windows.LazyProc240getOpenFileName *windows.LazyProc241getSaveFileName *windows.LazyProc242printDlgEx *windows.LazyProc243)
244
245func init() {246// Library247libcomdlg32 = windows.NewLazySystemDLL("comdlg32.dll")248
249// Functions250chooseColor = libcomdlg32.NewProc("ChooseColorW")251commDlgExtendedError = libcomdlg32.NewProc("CommDlgExtendedError")252getOpenFileName = libcomdlg32.NewProc("GetOpenFileNameW")253getSaveFileName = libcomdlg32.NewProc("GetSaveFileNameW")254printDlgEx = libcomdlg32.NewProc("PrintDlgExW")255}
256
257func ChooseColor(lpcc *CHOOSECOLOR) bool {258ret, _, _ := syscall.Syscall(chooseColor.Addr(), 1,259uintptr(unsafe.Pointer(lpcc)),2600,2610)262
263return ret != 0264}
265
266func CommDlgExtendedError() uint32 {267ret, _, _ := syscall.Syscall(commDlgExtendedError.Addr(), 0,2680,2690,2700)271
272return uint32(ret)273}
274
275func GetOpenFileName(lpofn *OPENFILENAME) bool {276ret, _, _ := syscall.Syscall(getOpenFileName.Addr(), 1,277uintptr(unsafe.Pointer(lpofn)),2780,2790)280
281return ret != 0282}
283
284func GetSaveFileName(lpofn *OPENFILENAME) bool {285ret, _, _ := syscall.Syscall(getSaveFileName.Addr(), 1,286uintptr(unsafe.Pointer(lpofn)),2870,2880)289
290return ret != 0291}
292
293func PrintDlgEx(lppd *PRINTDLGEX) HRESULT {294ret, _, _ := syscall.Syscall(printDlgEx.Addr(), 1,295uintptr(unsafe.Pointer(lppd)),2960,2970)298
299return HRESULT(ret)300}
301