go-tg-screenshot-bot
621 строка · 16.9 Кб
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"syscall"11"unsafe"12
13"golang.org/x/sys/windows"14)
15
16// TMT property ids
17const (18TMT_RESERVEDLOW = 019TMT_RESERVEDHIGH = 799920
21TMT_DIBDATA = 222TMT_GLYPHDIBDATA = 823TMT_ENUM = 20024TMT_STRING = 20125TMT_INT = 20226TMT_BOOL = 20327TMT_COLOR = 20428TMT_MARGINS = 20529TMT_FILENAME = 20630TMT_SIZE = 20731TMT_POSITION = 20832TMT_RECT = 20933TMT_FONT = 21034TMT_INTLIST = 21135TMT_HBITMAP = 21236TMT_DISKSTREAM = 21337TMT_STREAM = 21438TMT_BITMAPREF = 21539TMT_FLOAT = 21640TMT_FLOATLIST = 21741TMT_COLORSCHEMES = 40142TMT_SIZES = 40243TMT_CHARSET = 40344TMT_NAME = 60045TMT_DISPLAYNAME = 60146TMT_TOOLTIP = 60247TMT_COMPANY = 60348TMT_AUTHOR = 60449TMT_COPYRIGHT = 60550TMT_URL = 60651TMT_VERSION = 60752TMT_DESCRIPTION = 60853TMT_FIRST_RCSTRING_NAME = TMT_DISPLAYNAME54TMT_LAST_RCSTRING_NAME = TMT_DESCRIPTION55TMT_CAPTIONFONT = 80156TMT_SMALLCAPTIONFONT = 80257TMT_MENUFONT = 80358TMT_STATUSFONT = 80459TMT_MSGBOXFONT = 80560TMT_ICONTITLEFONT = 80661TMT_HEADING1FONT = 80762TMT_HEADING2FONT = 80863TMT_BODYFONT = 80964TMT_FIRSTFONT = TMT_CAPTIONFONT65TMT_LASTFONT = TMT_BODYFONT66TMT_FLATMENUS = 100167TMT_FIRSTBOOL = TMT_FLATMENUS68TMT_LASTBOOL = TMT_FLATMENUS69TMT_SIZINGBORDERWIDTH = 120170TMT_SCROLLBARWIDTH = 120271TMT_SCROLLBARHEIGHT = 120372TMT_CAPTIONBARWIDTH = 120473TMT_CAPTIONBARHEIGHT = 120574TMT_SMCAPTIONBARWIDTH = 120675TMT_SMCAPTIONBARHEIGHT = 120776TMT_MENUBARWIDTH = 120877TMT_MENUBARHEIGHT = 120978TMT_PADDEDBORDERWIDTH = 121079TMT_FIRSTSIZE = TMT_SIZINGBORDERWIDTH80TMT_LASTSIZE = TMT_PADDEDBORDERWIDTH81TMT_MINCOLORDEPTH = 130182TMT_FIRSTINT = TMT_MINCOLORDEPTH83TMT_LASTINT = TMT_MINCOLORDEPTH84TMT_CSSNAME = 140185TMT_XMLNAME = 140286TMT_LASTUPDATED = 140387TMT_ALIAS = 140488TMT_FIRSTSTRING = TMT_CSSNAME89TMT_LASTSTRING = TMT_ALIAS90TMT_SCROLLBAR = 160191TMT_BACKGROUND = 160292TMT_ACTIVECAPTION = 160393TMT_INACTIVECAPTION = 160494TMT_MENU = 160595TMT_WINDOW = 160696TMT_WINDOWFRAME = 160797TMT_MENUTEXT = 160898TMT_WINDOWTEXT = 160999TMT_CAPTIONTEXT = 1610100TMT_ACTIVEBORDER = 1611101TMT_INACTIVEBORDER = 1612102TMT_APPWORKSPACE = 1613103TMT_HIGHLIGHT = 1614104TMT_HIGHLIGHTTEXT = 1615105TMT_BTNFACE = 1616106TMT_BTNSHADOW = 1617107TMT_GRAYTEXT = 1618108TMT_BTNTEXT = 1619109TMT_INACTIVECAPTIONTEXT = 1620110TMT_BTNHIGHLIGHT = 1621111TMT_DKSHADOW3D = 1622112TMT_LIGHT3D = 1623113TMT_INFOTEXT = 1624114TMT_INFOBK = 1625115TMT_BUTTONALTERNATEFACE = 1626116TMT_HOTTRACKING = 1627117TMT_GRADIENTACTIVECAPTION = 1628118TMT_GRADIENTINACTIVECAPTION = 1629119TMT_MENUHILIGHT = 1630120TMT_MENUBAR = 1631121TMT_FIRSTCOLOR = TMT_SCROLLBAR122TMT_LASTCOLOR = TMT_MENUBAR123TMT_FROMHUE1 = 1801124TMT_FROMHUE2 = 1802125TMT_FROMHUE3 = 1803126TMT_FROMHUE4 = 1804127TMT_FROMHUE5 = 1805128TMT_TOHUE1 = 1806129TMT_TOHUE2 = 1807130TMT_TOHUE3 = 1808131TMT_TOHUE4 = 1809132TMT_TOHUE5 = 1810133TMT_FROMCOLOR1 = 2001134TMT_FROMCOLOR2 = 2002135TMT_FROMCOLOR3 = 2003136TMT_FROMCOLOR4 = 2004137TMT_FROMCOLOR5 = 2005138TMT_TOCOLOR1 = 2006139TMT_TOCOLOR2 = 2007140TMT_TOCOLOR3 = 2008141TMT_TOCOLOR4 = 2009142TMT_TOCOLOR5 = 2010143TMT_TRANSPARENT = 2201144TMT_AUTOSIZE = 2202145TMT_BORDERONLY = 2203146TMT_COMPOSITED = 2204147TMT_BGFILL = 2205148TMT_GLYPHTRANSPARENT = 2206149TMT_GLYPHONLY = 2207150TMT_ALWAYSSHOWSIZINGBAR = 2208151TMT_MIRRORIMAGE = 2209152TMT_UNIFORMSIZING = 2210153TMT_INTEGRALSIZING = 2211154TMT_SOURCEGROW = 2212155TMT_SOURCESHRINK = 2213156TMT_DRAWBORDERS = 2214157TMT_NOETCHEDEFFECT = 2215158TMT_TEXTAPPLYOVERLAY = 2216159TMT_TEXTGLOW = 2217160TMT_TEXTITALIC = 2218161TMT_COMPOSITEDOPAQUE = 2219162TMT_LOCALIZEDMIRRORIMAGE = 2220163TMT_IMAGECOUNT = 2401164TMT_ALPHALEVEL = 2402165TMT_BORDERSIZE = 2403166TMT_ROUNDCORNERWIDTH = 2404167TMT_ROUNDCORNERHEIGHT = 2405168TMT_GRADIENTRATIO1 = 2406169TMT_GRADIENTRATIO2 = 2407170TMT_GRADIENTRATIO3 = 2408171TMT_GRADIENTRATIO4 = 2409172TMT_GRADIENTRATIO5 = 2410173TMT_PROGRESSCHUNKSIZE = 2411174TMT_PROGRESSSPACESIZE = 2412175TMT_SATURATION = 2413176TMT_TEXTBORDERSIZE = 2414177TMT_ALPHATHRESHOLD = 2415178TMT_WIDTH = 2416179TMT_HEIGHT = 2417180TMT_GLYPHINDEX = 2418181TMT_TRUESIZESTRETCHMARK = 2419182TMT_MINDPI1 = 2420183TMT_MINDPI2 = 2421184TMT_MINDPI3 = 2422185TMT_MINDPI4 = 2423186TMT_MINDPI5 = 2424187TMT_TEXTGLOWSIZE = 2425188TMT_FRAMESPERSECOND = 2426189TMT_PIXELSPERFRAME = 2427190TMT_ANIMATIONDELAY = 2428191TMT_GLOWINTENSITY = 2429192TMT_OPACITY = 2430193TMT_COLORIZATIONCOLOR = 2431194TMT_COLORIZATIONOPACITY = 2432195TMT_MINDPI6 = 2433196TMT_MINDPI7 = 2434197TMT_GLYPHFONT = 2601198TMT_IMAGEFILE = 3001199TMT_IMAGEFILE1 = 3002200TMT_IMAGEFILE2 = 3003201TMT_IMAGEFILE3 = 3004202TMT_IMAGEFILE4 = 3005203TMT_IMAGEFILE5 = 3006204TMT_GLYPHIMAGEFILE = 3008205TMT_IMAGEFILE6 = 3009206TMT_IMAGEFILE7 = 3010207TMT_TEXT = 3201208TMT_CLASSICVALUE = 3202209TMT_OFFSET = 3401210TMT_TEXTSHADOWOFFSET = 3402211TMT_MINSIZE = 3403212TMT_MINSIZE1 = 3404213TMT_MINSIZE2 = 3405214TMT_MINSIZE3 = 3406215TMT_MINSIZE4 = 3407216TMT_MINSIZE5 = 3408217TMT_NORMALSIZE = 3409218TMT_MINSIZE6 = 3410219TMT_MINSIZE7 = 3411220TMT_SIZINGMARGINS = 3601221TMT_CONTENTMARGINS = 3602222TMT_CAPTIONMARGINS = 3603223TMT_BORDERCOLOR = 3801224TMT_FILLCOLOR = 3802225TMT_TEXTCOLOR = 3803226TMT_EDGELIGHTCOLOR = 3804227TMT_EDGEHIGHLIGHTCOLOR = 3805228TMT_EDGESHADOWCOLOR = 3806229TMT_EDGEDKSHADOWCOLOR = 3807230TMT_EDGEFILLCOLOR = 3808231TMT_TRANSPARENTCOLOR = 3809232TMT_GRADIENTCOLOR1 = 3810233TMT_GRADIENTCOLOR2 = 3811234TMT_GRADIENTCOLOR3 = 3812235TMT_GRADIENTCOLOR4 = 3813236TMT_GRADIENTCOLOR5 = 3814237TMT_SHADOWCOLOR = 3815238TMT_GLOWCOLOR = 3816239TMT_TEXTBORDERCOLOR = 3817240TMT_TEXTSHADOWCOLOR = 3818241TMT_GLYPHTEXTCOLOR = 3819242TMT_GLYPHTRANSPARENTCOLOR = 3820243TMT_FILLCOLORHINT = 3821244TMT_BORDERCOLORHINT = 3822245TMT_ACCENTCOLORHINT = 3823246TMT_TEXTCOLORHINT = 3824247TMT_HEADING1TEXTCOLOR = 3825248TMT_HEADING2TEXTCOLOR = 3826249TMT_BODYTEXTCOLOR = 3827250TMT_BGTYPE = 4001251TMT_BORDERTYPE = 4002252TMT_FILLTYPE = 4003253TMT_SIZINGTYPE = 4004254TMT_HALIGN = 4005255TMT_CONTENTALIGNMENT = 4006256TMT_VALIGN = 4007257TMT_OFFSETTYPE = 4008258TMT_ICONEFFECT = 4009259TMT_TEXTSHADOWTYPE = 4010260TMT_IMAGELAYOUT = 4011261TMT_GLYPHTYPE = 4012262TMT_IMAGESELECTTYPE = 4013263TMT_GLYPHFONTSIZINGTYPE = 4014264TMT_TRUESIZESCALINGTYPE = 4015265TMT_USERPICTURE = 5001266TMT_DEFAULTPANESIZE = 5002267TMT_BLENDCOLOR = 5003268TMT_CUSTOMSPLITRECT = 5004269TMT_ANIMATIONBUTTONRECT = 5005270TMT_ANIMATIONDURATION = 5006271TMT_TRANSITIONDURATIONS = 6000272TMT_SCALEDBACKGROUND = 7001273TMT_ATLASIMAGE = 8000274TMT_ATLASINPUTIMAGE = 8001275TMT_ATLASRECT = 8002276)
277
278// Button parts
279const (280BP_PUSHBUTTON = 1281BP_RADIOBUTTON = 2282BP_CHECKBOX = 3283BP_GROUPBOX = 4284BP_USERBUTTON = 5285BP_COMMANDLINK = 6286BP_COMMANDLINKGLYPH = 7287)
288
289// Push-button states
290const (291PBS_NORMAL = 1292PBS_HOT = 2293PBS_PRESSED = 3294PBS_DISABLED = 4295PBS_DEFAULTED = 5296PBS_DEFAULTED_ANIMATING = 6297)
298
299// CheckBox states
300const (301CBS_UNCHECKEDNORMAL = 1302CBS_UNCHECKEDHOT = 2303CBS_UNCHECKEDPRESSED = 3304CBS_UNCHECKEDDISABLED = 4305CBS_CHECKEDNORMAL = 5306CBS_CHECKEDHOT = 6307CBS_CHECKEDPRESSED = 7308CBS_CHECKEDDISABLED = 8309CBS_MIXEDNORMAL = 9310CBS_MIXEDHOT = 10311CBS_MIXEDPRESSED = 11312CBS_MIXEDDISABLED = 12313CBS_IMPLICITNORMAL = 13314CBS_IMPLICITHOT = 14315CBS_IMPLICITPRESSED = 15316CBS_IMPLICITDISABLED = 16317CBS_EXCLUDEDNORMAL = 17318CBS_EXCLUDEDHOT = 18319CBS_EXCLUDEDPRESSED = 19320CBS_EXCLUDEDDISABLED = 20321)
322
323// ListBox parts
324const (325LBCP_ITEM = 5326)
327
328// LBCP_ITEM states
329const (330LBPSI_HOT = 1331LBPSI_HOTSELECTED = 2332LBPSI_SELECTED = 3333LBPSI_SELECTEDNOTFOCUS = 4334)
335
336// LISTVIEW parts
337const (338LVP_LISTITEM = 1339LVP_LISTGROUP = 2340LVP_LISTDETAIL = 3341LVP_LISTSORTEDDETAIL = 4342LVP_EMPTYTEXT = 5343LVP_GROUPHEADER = 6344LVP_GROUPHEADERLINE = 7345LVP_EXPANDBUTTON = 8346LVP_COLLAPSEBUTTON = 9347LVP_COLUMNDETAIL = 10348)
349
350// LVP_LISTITEM states
351const (352LISS_NORMAL = 1353LISS_HOT = 2354LISS_SELECTED = 3355LISS_DISABLED = 4356LISS_SELECTEDNOTFOCUS = 5357LISS_HOTSELECTED = 6358)
359
360// PROGRESS parts
361const (362PP_BAR = 1363PP_BARVERT = 2364PP_CHUNK = 3365PP_CHUNKVERT = 4366PP_FILL = 5367PP_FILLVERT = 6368PP_PULSEOVERLAY = 7369PP_MOVEOVERLAY = 8370PP_PULSEOVERLAYVERT = 9371PP_MOVEOVERLAYVERT = 10372PP_TRANSPARENTBAR = 11373PP_TRANSPARENTBARVERT = 12374)
375
376// PP_FILL states
377const (378PBFS_NORMAL = 1379PBFS_ERROR = 2380PBFS_PAUSED = 3381PBFS_PARTIAL = 4382)
383
384// PP_FILLVERT states
385const (386PBFVS_NORMAL = 1387PBFVS_ERROR = 2388PBFVS_PAUSED = 3389PBFVS_PARTIAL = 4390)
391
392// TAB parts
393const (394TABP_TABITEM = 1395)
396
397// TABP_TABITEM states
398const (399TIS_NORMAL = 1400TIS_HOT = 2401TIS_SELECTED = 3402TIS_DISABLED = 4403TIS_FOCUSED = 5404)
405
406// TREEVIEW parts
407const (408TVP_TREEITEM = 1409TVP_GLYPH = 2410TVP_BRANCH = 3411TVP_HOTGLYPH = 4412)
413
414// TVP_TREEITEM states
415const (416TREIS_NORMAL = 1417TREIS_HOT = 2418TREIS_SELECTED = 3419TREIS_DISABLED = 4420TREIS_SELECTEDNOTFOCUS = 5421TREIS_HOTSELECTED = 6422)
423
424// DTTOPTS flags
425const (426DTT_TEXTCOLOR = 1 << 0427DTT_BORDERCOLOR = 1 << 1428DTT_SHADOWCOLOR = 1 << 2429DTT_SHADOWTYPE = 1 << 3430DTT_SHADOWOFFSET = 1 << 4431DTT_BORDERSIZE = 1 << 5432DTT_FONTPROP = 1 << 6433DTT_COLORPROP = 1 << 7434DTT_STATEID = 1 << 8435DTT_CALCRECT = 1 << 9436DTT_APPLYOVERLAY = 1 << 10437DTT_GLOWSIZE = 1 << 11438DTT_CALLBACK = 1 << 12439DTT_COMPOSITED = 1 << 13440DTT_VALIDBITS = DTT_TEXTCOLOR |441DTT_BORDERCOLOR |442DTT_SHADOWCOLOR |443DTT_SHADOWTYPE |444DTT_SHADOWOFFSET |445DTT_BORDERSIZE |446DTT_FONTPROP |447DTT_COLORPROP |448DTT_STATEID |449DTT_CALCRECT |450DTT_APPLYOVERLAY |451DTT_GLOWSIZE |452DTT_COMPOSITED
453)
454
455type HTHEME HANDLE456
457type THEMESIZE int458
459const (460TS_MIN THEMESIZE = iota461TS_TRUE
462TS_DRAW
463)
464
465type DTTOPTS struct {466DwSize uint32467DwFlags uint32468CrText COLORREF
469CrBorder COLORREF
470CrShadow COLORREF
471ITextShadowType int32472PtShadowOffset POINT
473IBorderSize int32474IFontPropId int32475IColorPropId int32476IStateId int32477FApplyOverlay BOOL
478IGlowSize int32479PfnDrawTextCallback uintptr480LParam uintptr481}
482
483var (484// Library485libuxtheme *windows.LazyDLL486
487// Functions488closeThemeData *windows.LazyProc489drawThemeBackground *windows.LazyProc490drawThemeTextEx *windows.LazyProc491getThemeColor *windows.LazyProc492getThemePartSize *windows.LazyProc493getThemeTextExtent *windows.LazyProc494isAppThemed *windows.LazyProc495openThemeData *windows.LazyProc496setWindowTheme *windows.LazyProc497)
498
499func init() {500// Library501libuxtheme = windows.NewLazySystemDLL("uxtheme.dll")502
503// Functions504closeThemeData = libuxtheme.NewProc("CloseThemeData")505drawThemeBackground = libuxtheme.NewProc("DrawThemeBackground")506drawThemeTextEx = libuxtheme.NewProc("DrawThemeTextEx")507getThemeColor = libuxtheme.NewProc("GetThemeColor")508getThemePartSize = libuxtheme.NewProc("GetThemePartSize")509getThemeTextExtent = libuxtheme.NewProc("GetThemeTextExtent")510isAppThemed = libuxtheme.NewProc("IsAppThemed")511openThemeData = libuxtheme.NewProc("OpenThemeData")512setWindowTheme = libuxtheme.NewProc("SetWindowTheme")513}
514
515func CloseThemeData(hTheme HTHEME) HRESULT {516ret, _, _ := syscall.Syscall(closeThemeData.Addr(), 1,517uintptr(hTheme),5180,5190)520
521return HRESULT(ret)522}
523
524func DrawThemeBackground(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, pRect, pClipRect *RECT) HRESULT {525ret, _, _ := syscall.Syscall6(drawThemeBackground.Addr(), 6,526uintptr(hTheme),527uintptr(hdc),528uintptr(iPartId),529uintptr(iStateId),530uintptr(unsafe.Pointer(pRect)),531uintptr(unsafe.Pointer(pClipRect)))532
533return HRESULT(ret)534}
535
536func DrawThemeTextEx(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, pszText *uint16, iCharCount int32, dwFlags uint32, pRect *RECT, pOptions *DTTOPTS) HRESULT {537if drawThemeTextEx.Find() != nil {538return HRESULT(0)539}540ret, _, _ := syscall.Syscall9(drawThemeTextEx.Addr(), 9,541uintptr(hTheme),542uintptr(hdc),543uintptr(iPartId),544uintptr(iStateId),545uintptr(unsafe.Pointer(pszText)),546uintptr(iCharCount),547uintptr(dwFlags),548uintptr(unsafe.Pointer(pRect)),549uintptr(unsafe.Pointer(pOptions)))550
551return HRESULT(ret)552}
553
554func GetThemeColor(hTheme HTHEME, iPartId, iStateId, iPropId int32, pColor *COLORREF) HRESULT {555ret, _, _ := syscall.Syscall6(getThemeColor.Addr(), 5,556uintptr(hTheme),557uintptr(iPartId),558uintptr(iStateId),559uintptr(iPropId),560uintptr(unsafe.Pointer(pColor)),5610)562
563return HRESULT(ret)564}
565
566func GetThemePartSize(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, prc *RECT, eSize THEMESIZE, psz *SIZE) HRESULT {567ret, _, _ := syscall.Syscall9(getThemePartSize.Addr(), 7,568uintptr(hTheme),569uintptr(hdc),570uintptr(iPartId),571uintptr(iStateId),572uintptr(unsafe.Pointer(prc)),573uintptr(eSize),574uintptr(unsafe.Pointer(psz)),5750,5760)577
578return HRESULT(ret)579}
580
581func GetThemeTextExtent(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, pszText *uint16, iCharCount int32, dwTextFlags uint32, pBoundingRect, pExtentRect *RECT) HRESULT {582ret, _, _ := syscall.Syscall9(getThemeTextExtent.Addr(), 9,583uintptr(hTheme),584uintptr(hdc),585uintptr(iPartId),586uintptr(iStateId),587uintptr(unsafe.Pointer(pszText)),588uintptr(iCharCount),589uintptr(dwTextFlags),590uintptr(unsafe.Pointer(pBoundingRect)),591uintptr(unsafe.Pointer(pExtentRect)))592
593return HRESULT(ret)594}
595
596func IsAppThemed() bool {597ret, _, _ := syscall.Syscall(isAppThemed.Addr(), 0,5980,5990,6000)601
602return ret != 0603}
604
605func OpenThemeData(hwnd HWND, pszClassList *uint16) HTHEME {606ret, _, _ := syscall.Syscall(openThemeData.Addr(), 2,607uintptr(hwnd),608uintptr(unsafe.Pointer(pszClassList)),6090)610
611return HTHEME(ret)612}
613
614func SetWindowTheme(hwnd HWND, pszSubAppName, pszSubIdList *uint16) HRESULT {615ret, _, _ := syscall.Syscall(setWindowTheme.Addr(), 3,616uintptr(hwnd),617uintptr(unsafe.Pointer(pszSubAppName)),618uintptr(unsafe.Pointer(pszSubIdList)))619
620return HRESULT(ret)621}
622