github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/windows/winc/w32/typedef.go (about)

     1  //go:build windows
     2  
     3  /*
     4   * Copyright (C) 2019 Tad Vizbaras. All Rights Reserved.
     5   * Copyright (C) 2010-2012 The W32 Authors. All Rights Reserved.
     6   */
     7  
     8  package w32
     9  
    10  import (
    11  	"fmt"
    12  	"unsafe"
    13  )
    14  
    15  // From MSDN: Windows Data Types
    16  // http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx
    17  // http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751.aspx
    18  // ATOM                  WORD
    19  // BOOL                  int32
    20  // BOOLEAN               byte
    21  // BYTE                  byte
    22  // CCHAR                 int8
    23  // CHAR                  int8
    24  // COLORREF              DWORD
    25  // DWORD                 uint32
    26  // DWORDLONG             ULONGLONG
    27  // DWORD_PTR             ULONG_PTR
    28  // DWORD32               uint32
    29  // DWORD64               uint64
    30  // FLOAT                 float32
    31  // HACCEL                HANDLE
    32  // HALF_PTR              struct{} // ???
    33  // HANDLE                PVOID
    34  // HBITMAP               HANDLE
    35  // HBRUSH                HANDLE
    36  // HCOLORSPACE           HANDLE
    37  // HCONV                 HANDLE
    38  // HCONVLIST             HANDLE
    39  // HCURSOR               HANDLE
    40  // HDC                   HANDLE
    41  // HDDEDATA              HANDLE
    42  // HDESK                 HANDLE
    43  // HDROP                 HANDLE
    44  // HDWP                  HANDLE
    45  // HENHMETAFILE          HANDLE
    46  // HFILE                 HANDLE
    47  // HFONT                 HANDLE
    48  // HGDIOBJ               HANDLE
    49  // HGLOBAL               HANDLE
    50  // HHOOK                 HANDLE
    51  // HICON                 HANDLE
    52  // HINSTANCE             HANDLE
    53  // HKEY                  HANDLE
    54  // HKL                   HANDLE
    55  // HLOCAL                HANDLE
    56  // HMENU                 HANDLE
    57  // HMETAFILE             HANDLE
    58  // HMODULE               HANDLE
    59  // HPALETTE              HANDLE
    60  // HPEN                  HANDLE
    61  // HRESULT               int32
    62  // HRGN                  HANDLE
    63  // HSZ                   HANDLE
    64  // HWINSTA               HANDLE
    65  // HWND                  HANDLE
    66  // INT                   int32
    67  // INT_PTR               uintptr
    68  // INT8                  int8
    69  // INT16                 int16
    70  // INT32                 int32
    71  // INT64                 int64
    72  // LANGID                WORD
    73  // LCID                  DWORD
    74  // LCTYPE                DWORD
    75  // LGRPID                DWORD
    76  // LONG                  int32
    77  // LONGLONG              int64
    78  // LONG_PTR              uintptr
    79  // LONG32                int32
    80  // LONG64                int64
    81  // LPARAM                LONG_PTR
    82  // LPBOOL                *BOOL
    83  // LPBYTE                *BYTE
    84  // LPCOLORREF            *COLORREF
    85  // LPCSTR                *int8
    86  // LPCTSTR               LPCWSTR
    87  // LPCVOID               unsafe.Pointer
    88  // LPCWSTR               *WCHAR
    89  // LPDWORD               *DWORD
    90  // LPHANDLE              *HANDLE
    91  // LPINT                 *INT
    92  // LPLONG                *LONG
    93  // LPSTR                 *CHAR
    94  // LPTSTR                LPWSTR
    95  // LPVOID                unsafe.Pointer
    96  // LPWORD                *WORD
    97  // LPWSTR                *WCHAR
    98  // LRESULT               LONG_PTR
    99  // PBOOL                 *BOOL
   100  // PBOOLEAN              *BOOLEAN
   101  // PBYTE                 *BYTE
   102  // PCHAR                 *CHAR
   103  // PCSTR                 *CHAR
   104  // PCTSTR                PCWSTR
   105  // PCWSTR                *WCHAR
   106  // PDWORD                *DWORD
   107  // PDWORDLONG            *DWORDLONG
   108  // PDWORD_PTR            *DWORD_PTR
   109  // PDWORD32              *DWORD32
   110  // PDWORD64              *DWORD64
   111  // PFLOAT                *FLOAT
   112  // PHALF_PTR             *HALF_PTR
   113  // PHANDLE               *HANDLE
   114  // PHKEY                 *HKEY
   115  // PINT_PTR              *INT_PTR
   116  // PINT8                 *INT8
   117  // PINT16                *INT16
   118  // PINT32                *INT32
   119  // PINT64                *INT64
   120  // PLCID                 *LCID
   121  // PLONG                 *LONG
   122  // PLONGLONG             *LONGLONG
   123  // PLONG_PTR             *LONG_PTR
   124  // PLONG32               *LONG32
   125  // PLONG64               *LONG64
   126  // POINTER_32            struct{} // ???
   127  // POINTER_64            struct{} // ???
   128  // POINTER_SIGNED        uintptr
   129  // POINTER_UNSIGNED      uintptr
   130  // PSHORT                *SHORT
   131  // PSIZE_T               *SIZE_T
   132  // PSSIZE_T              *SSIZE_T
   133  // PSTR                  *CHAR
   134  // PTBYTE                *TBYTE
   135  // PTCHAR                *TCHAR
   136  // PTSTR                 PWSTR
   137  // PUCHAR                *UCHAR
   138  // PUHALF_PTR            *UHALF_PTR
   139  // PUINT                 *UINT
   140  // PUINT_PTR             *UINT_PTR
   141  // PUINT8                *UINT8
   142  // PUINT16               *UINT16
   143  // PUINT32               *UINT32
   144  // PUINT64               *UINT64
   145  // PULONG                *ULONG
   146  // PULONGLONG            *ULONGLONG
   147  // PULONG_PTR            *ULONG_PTR
   148  // PULONG32              *ULONG32
   149  // PULONG64              *ULONG64
   150  // PUSHORT               *USHORT
   151  // PVOID                 unsafe.Pointer
   152  // PWCHAR                *WCHAR
   153  // PWORD                 *WORD
   154  // PWSTR                 *WCHAR
   155  // QWORD                 uint64
   156  // SC_HANDLE             HANDLE
   157  // SC_LOCK               LPVOID
   158  // SERVICE_STATUS_HANDLE HANDLE
   159  // SHORT                 int16
   160  // SIZE_T                ULONG_PTR
   161  // SSIZE_T               LONG_PTR
   162  // TBYTE                 WCHAR
   163  // TCHAR                 WCHAR
   164  // UCHAR                 uint8
   165  // UHALF_PTR             struct{} // ???
   166  // UINT                  uint32
   167  // UINT_PTR              uintptr
   168  // UINT8                 uint8
   169  // UINT16                uint16
   170  // UINT32                uint32
   171  // UINT64                uint64
   172  // ULONG                 uint32
   173  // ULONGLONG             uint64
   174  // ULONG_PTR             uintptr
   175  // ULONG32               uint32
   176  // ULONG64               uint64
   177  // USHORT                uint16
   178  // USN                   LONGLONG
   179  // WCHAR                 uint16
   180  // WORD                  uint16
   181  // WPARAM                UINT_PTR
   182  type (
   183  	ATOM            = uint16
   184  	BOOL            = int32
   185  	COLORREF        = uint32
   186  	DWM_FRAME_COUNT = uint64
   187  	WORD            = uint16
   188  	DWORD           = uint32
   189  	HACCEL          = HANDLE
   190  	HANDLE          = uintptr
   191  	HBITMAP         = HANDLE
   192  	HBRUSH          = HANDLE
   193  	HCURSOR         = HANDLE
   194  	HDC             = HANDLE
   195  	HDROP           = HANDLE
   196  	HDWP            = HANDLE
   197  	HENHMETAFILE    = HANDLE
   198  	HFONT           = HANDLE
   199  	HGDIOBJ         = HANDLE
   200  	HGLOBAL         = HANDLE
   201  	HGLRC           = HANDLE
   202  	HHOOK           = HANDLE
   203  	HICON           = HANDLE
   204  	HIMAGELIST      = HANDLE
   205  	HINSTANCE       = HANDLE
   206  	HKEY            = HANDLE
   207  	HKL             = HANDLE
   208  	HMENU           = HANDLE
   209  	HMODULE         = HANDLE
   210  	HMONITOR        = HANDLE
   211  	HPEN            = HANDLE
   212  	HRESULT         = int32
   213  	HRGN            = HANDLE
   214  	HRSRC           = HANDLE
   215  	HTHUMBNAIL      = HANDLE
   216  	HWND            = HANDLE
   217  	LPARAM          = uintptr
   218  	LPCVOID         = unsafe.Pointer
   219  	LRESULT         = uintptr
   220  	PVOID           = unsafe.Pointer
   221  	QPC_TIME        = uint64
   222  	ULONG_PTR       = uintptr
   223  	SIZE_T          = ULONG_PTR
   224  	WPARAM          = uintptr
   225  	UINT            = uint
   226  )
   227  
   228  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd162805.aspx
   229  type POINT struct {
   230  	X, Y int32
   231  }
   232  
   233  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd162897.aspx
   234  type RECT struct {
   235  	Left, Top, Right, Bottom int32
   236  }
   237  
   238  func (r *RECT) String() string {
   239  	return fmt.Sprintf("RECT (%p): Left: %d, Top: %d, Right: %d, Bottom: %d", r, r.Left, r.Top, r.Right, r.Bottom)
   240  }
   241  
   242  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms633577.aspx
   243  type WNDCLASSEX struct {
   244  	Size       uint32
   245  	Style      uint32
   246  	WndProc    uintptr
   247  	ClsExtra   int32
   248  	WndExtra   int32
   249  	Instance   HINSTANCE
   250  	Icon       HICON
   251  	Cursor     HCURSOR
   252  	Background HBRUSH
   253  	MenuName   *uint16
   254  	ClassName  *uint16
   255  	IconSm     HICON
   256  }
   257  
   258  type TPMPARAMS struct {
   259  	CbSize    uint32
   260  	RcExclude RECT
   261  }
   262  
   263  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms644958.aspx
   264  type MSG struct {
   265  	Hwnd    HWND
   266  	Message uint32
   267  	WParam  uintptr
   268  	LParam  uintptr
   269  	Time    uint32
   270  	Pt      POINT
   271  }
   272  
   273  // https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-minmaxinfo
   274  type MINMAXINFO struct {
   275  	PtReserved     POINT
   276  	PtMaxSize      POINT
   277  	PtMaxPosition  POINT
   278  	PtMinTrackSize POINT
   279  	PtMaxTrackSize POINT
   280  }
   281  
   282  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd145037.aspx
   283  type LOGFONT struct {
   284  	Height         int32
   285  	Width          int32
   286  	Escapement     int32
   287  	Orientation    int32
   288  	Weight         int32
   289  	Italic         byte
   290  	Underline      byte
   291  	StrikeOut      byte
   292  	CharSet        byte
   293  	OutPrecision   byte
   294  	ClipPrecision  byte
   295  	Quality        byte
   296  	PitchAndFamily byte
   297  	FaceName       [LF_FACESIZE]uint16
   298  }
   299  
   300  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms646839.aspx
   301  type OPENFILENAME struct {
   302  	StructSize      uint32
   303  	Owner           HWND
   304  	Instance        HINSTANCE
   305  	Filter          *uint16
   306  	CustomFilter    *uint16
   307  	MaxCustomFilter uint32
   308  	FilterIndex     uint32
   309  	File            *uint16
   310  	MaxFile         uint32
   311  	FileTitle       *uint16
   312  	MaxFileTitle    uint32
   313  	InitialDir      *uint16
   314  	Title           *uint16
   315  	Flags           uint32
   316  	FileOffset      uint16
   317  	FileExtension   uint16
   318  	DefExt          *uint16
   319  	CustData        uintptr
   320  	FnHook          uintptr
   321  	TemplateName    *uint16
   322  	PvReserved      unsafe.Pointer
   323  	DwReserved      uint32
   324  	FlagsEx         uint32
   325  }
   326  
   327  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb773205.aspx
   328  type BROWSEINFO struct {
   329  	Owner        HWND
   330  	Root         *uint16
   331  	DisplayName  *uint16
   332  	Title        *uint16
   333  	Flags        uint32
   334  	CallbackFunc uintptr
   335  	LParam       uintptr
   336  	Image        int32
   337  }
   338  
   339  // http://msdn.microsoft.com/en-us/library/windows/desktop/aa373931.aspx
   340  type GUID struct {
   341  	Data1 uint32
   342  	Data2 uint16
   343  	Data3 uint16
   344  	Data4 [8]byte
   345  }
   346  
   347  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms221627.aspx
   348  type VARIANT struct {
   349  	VT         uint16 //  2
   350  	WReserved1 uint16 //  4
   351  	WReserved2 uint16 //  6
   352  	WReserved3 uint16 //  8
   353  	Val        int64  // 16
   354  }
   355  
   356  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms221416.aspx
   357  type DISPPARAMS struct {
   358  	Rgvarg            uintptr
   359  	RgdispidNamedArgs uintptr
   360  	CArgs             uint32
   361  	CNamedArgs        uint32
   362  }
   363  
   364  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms221133.aspx
   365  type EXCEPINFO struct {
   366  	WCode             uint16
   367  	WReserved         uint16
   368  	BstrSource        *uint16
   369  	BstrDescription   *uint16
   370  	BstrHelpFile      *uint16
   371  	DwHelpContext     uint32
   372  	PvReserved        uintptr
   373  	PfnDeferredFillIn uintptr
   374  	Scode             int32
   375  }
   376  
   377  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd145035.aspx
   378  type LOGBRUSH struct {
   379  	LbStyle uint32
   380  	LbColor COLORREF
   381  	LbHatch uintptr
   382  }
   383  
   384  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565.aspx
   385  type DEVMODE struct {
   386  	DmDeviceName       [CCHDEVICENAME]uint16
   387  	DmSpecVersion      uint16
   388  	DmDriverVersion    uint16
   389  	DmSize             uint16
   390  	DmDriverExtra      uint16
   391  	DmFields           uint32
   392  	DmOrientation      int16
   393  	DmPaperSize        int16
   394  	DmPaperLength      int16
   395  	DmPaperWidth       int16
   396  	DmScale            int16
   397  	DmCopies           int16
   398  	DmDefaultSource    int16
   399  	DmPrintQuality     int16
   400  	DmColor            int16
   401  	DmDuplex           int16
   402  	DmYResolution      int16
   403  	DmTTOption         int16
   404  	DmCollate          int16
   405  	DmFormName         [CCHFORMNAME]uint16
   406  	DmLogPixels        uint16
   407  	DmBitsPerPel       uint32
   408  	DmPelsWidth        uint32
   409  	DmPelsHeight       uint32
   410  	DmDisplayFlags     uint32
   411  	DmDisplayFrequency uint32
   412  	DmICMMethod        uint32
   413  	DmICMIntent        uint32
   414  	DmMediaType        uint32
   415  	DmDitherType       uint32
   416  	DmReserved1        uint32
   417  	DmReserved2        uint32
   418  	DmPanningWidth     uint32
   419  	DmPanningHeight    uint32
   420  }
   421  
   422  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183376.aspx
   423  type BITMAPINFOHEADER struct {
   424  	BiSize          uint32
   425  	BiWidth         int32
   426  	BiHeight        int32
   427  	BiPlanes        uint16
   428  	BiBitCount      uint16
   429  	BiCompression   uint32
   430  	BiSizeImage     uint32
   431  	BiXPelsPerMeter int32
   432  	BiYPelsPerMeter int32
   433  	BiClrUsed       uint32
   434  	BiClrImportant  uint32
   435  }
   436  
   437  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd162938.aspx
   438  type RGBQUAD struct {
   439  	RgbBlue     byte
   440  	RgbGreen    byte
   441  	RgbRed      byte
   442  	RgbReserved byte
   443  }
   444  
   445  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183375.aspx
   446  type BITMAPINFO struct {
   447  	BmiHeader BITMAPINFOHEADER
   448  	BmiColors *RGBQUAD
   449  }
   450  
   451  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183371.aspx
   452  type BITMAP struct {
   453  	BmType       int32
   454  	BmWidth      int32
   455  	BmHeight     int32
   456  	BmWidthBytes int32
   457  	BmPlanes     uint16
   458  	BmBitsPixel  uint16
   459  	BmBits       unsafe.Pointer
   460  }
   461  
   462  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183567.aspx
   463  type DIBSECTION struct {
   464  	DsBm        BITMAP
   465  	DsBmih      BITMAPINFOHEADER
   466  	DsBitfields [3]uint32
   467  	DshSection  HANDLE
   468  	DsOffset    uint32
   469  }
   470  
   471  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd162607.aspx
   472  type ENHMETAHEADER struct {
   473  	IType          uint32
   474  	NSize          uint32
   475  	RclBounds      RECT
   476  	RclFrame       RECT
   477  	DSignature     uint32
   478  	NVersion       uint32
   479  	NBytes         uint32
   480  	NRecords       uint32
   481  	NHandles       uint16
   482  	SReserved      uint16
   483  	NDescription   uint32
   484  	OffDescription uint32
   485  	NPalEntries    uint32
   486  	SzlDevice      SIZE
   487  	SzlMillimeters SIZE
   488  	CbPixelFormat  uint32
   489  	OffPixelFormat uint32
   490  	BOpenGL        uint32
   491  	SzlMicrometers SIZE
   492  }
   493  
   494  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd145106.aspx
   495  type SIZE struct {
   496  	CX, CY int32
   497  }
   498  
   499  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd145132.aspx
   500  type TEXTMETRIC struct {
   501  	TmHeight           int32
   502  	TmAscent           int32
   503  	TmDescent          int32
   504  	TmInternalLeading  int32
   505  	TmExternalLeading  int32
   506  	TmAveCharWidth     int32
   507  	TmMaxCharWidth     int32
   508  	TmWeight           int32
   509  	TmOverhang         int32
   510  	TmDigitizedAspectX int32
   511  	TmDigitizedAspectY int32
   512  	TmFirstChar        uint16
   513  	TmLastChar         uint16
   514  	TmDefaultChar      uint16
   515  	TmBreakChar        uint16
   516  	TmItalic           byte
   517  	TmUnderlined       byte
   518  	TmStruckOut        byte
   519  	TmPitchAndFamily   byte
   520  	TmCharSet          byte
   521  }
   522  
   523  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183574.aspx
   524  type DOCINFO struct {
   525  	CbSize       int32
   526  	LpszDocName  *uint16
   527  	LpszOutput   *uint16
   528  	LpszDatatype *uint16
   529  	FwType       uint32
   530  }
   531  
   532  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb775514.aspx
   533  type NMHDR struct {
   534  	HwndFrom HWND
   535  	IdFrom   uintptr
   536  	Code     uint32
   537  }
   538  
   539  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb774743.aspx
   540  type LVCOLUMN struct {
   541  	Mask       uint32
   542  	Fmt        int32
   543  	Cx         int32
   544  	PszText    *uint16
   545  	CchTextMax int32
   546  	ISubItem   int32
   547  	IImage     int32
   548  	IOrder     int32
   549  }
   550  
   551  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb774760.aspx
   552  type LVITEM struct {
   553  	Mask       uint32
   554  	IItem      int32
   555  	ISubItem   int32
   556  	State      uint32
   557  	StateMask  uint32
   558  	PszText    *uint16
   559  	CchTextMax int32
   560  	IImage     int32
   561  	LParam     uintptr
   562  	IIndent    int32
   563  	IGroupId   int32
   564  	CColumns   uint32
   565  	PuColumns  uint32
   566  }
   567  
   568  type LVFINDINFO struct {
   569  	Flags       uint32
   570  	PszText     *uint16
   571  	LParam      uintptr
   572  	Pt          POINT
   573  	VkDirection uint32
   574  }
   575  
   576  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb774754.aspx
   577  type LVHITTESTINFO struct {
   578  	Pt       POINT
   579  	Flags    uint32
   580  	IItem    int32
   581  	ISubItem int32
   582  	IGroup   int32
   583  }
   584  
   585  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb774771.aspx
   586  type NMITEMACTIVATE struct {
   587  	Hdr       NMHDR
   588  	IItem     int32
   589  	ISubItem  int32
   590  	UNewState uint32
   591  	UOldState uint32
   592  	UChanged  uint32
   593  	PtAction  POINT
   594  	LParam    uintptr
   595  	UKeyFlags uint32
   596  }
   597  
   598  type NMLVKEYDOWN struct {
   599  	Hdr   NMHDR
   600  	WVKey uint16
   601  	Flags uint32
   602  }
   603  
   604  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb774773.aspx
   605  type NMLISTVIEW struct {
   606  	Hdr       NMHDR
   607  	IItem     int32
   608  	ISubItem  int32
   609  	UNewState uint32
   610  	UOldState uint32
   611  	UChanged  uint32
   612  	PtAction  POINT
   613  	LParam    uintptr
   614  }
   615  
   616  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb774780.aspx
   617  type NMLVDISPINFO struct {
   618  	Hdr  NMHDR
   619  	Item LVITEM
   620  }
   621  
   622  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb775507.aspx
   623  type INITCOMMONCONTROLSEX struct {
   624  	DwSize uint32
   625  	DwICC  uint32
   626  }
   627  
   628  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb760256.aspx
   629  type TOOLINFO struct {
   630  	CbSize     uint32
   631  	UFlags     uint32
   632  	Hwnd       HWND
   633  	UId        uintptr
   634  	Rect       RECT
   635  	Hinst      HINSTANCE
   636  	LpszText   *uint16
   637  	LParam     uintptr
   638  	LpReserved unsafe.Pointer
   639  }
   640  
   641  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms645604.aspx
   642  type TRACKMOUSEEVENT struct {
   643  	CbSize      uint32
   644  	DwFlags     uint32
   645  	HwndTrack   HWND
   646  	DwHoverTime uint32
   647  }
   648  
   649  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms534067.aspx
   650  type GdiplusStartupInput struct {
   651  	GdiplusVersion           uint32
   652  	DebugEventCallback       uintptr
   653  	SuppressBackgroundThread BOOL
   654  	SuppressExternalCodecs   BOOL
   655  }
   656  
   657  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms534068.aspx
   658  type GdiplusStartupOutput struct {
   659  	NotificationHook   uintptr
   660  	NotificationUnhook uintptr
   661  }
   662  
   663  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd162768.aspx
   664  type PAINTSTRUCT struct {
   665  	Hdc         HDC
   666  	FErase      BOOL
   667  	RcPaint     RECT
   668  	FRestore    BOOL
   669  	FIncUpdate  BOOL
   670  	RgbReserved [32]byte
   671  }
   672  
   673  // http://msdn.microsoft.com/en-us/library/windows/desktop/aa363646.aspx
   674  type EVENTLOGRECORD struct {
   675  	Length              uint32
   676  	Reserved            uint32
   677  	RecordNumber        uint32
   678  	TimeGenerated       uint32
   679  	TimeWritten         uint32
   680  	EventID             uint32
   681  	EventType           uint16
   682  	NumStrings          uint16
   683  	EventCategory       uint16
   684  	ReservedFlags       uint16
   685  	ClosingRecordNumber uint32
   686  	StringOffset        uint32
   687  	UserSidLength       uint32
   688  	UserSidOffset       uint32
   689  	DataLength          uint32
   690  	DataOffset          uint32
   691  }
   692  
   693  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms685996.aspx
   694  type SERVICE_STATUS struct {
   695  	DwServiceType             uint32
   696  	DwCurrentState            uint32
   697  	DwControlsAccepted        uint32
   698  	DwWin32ExitCode           uint32
   699  	DwServiceSpecificExitCode uint32
   700  	DwCheckPoint              uint32
   701  	DwWaitHint                uint32
   702  }
   703  
   704  /* -------------------------
   705      Undocumented API
   706  ------------------------- */
   707  
   708  type ACCENT_STATE DWORD
   709  
   710  const (
   711  	ACCENT_DISABLED                   ACCENT_STATE = 0
   712  	ACCENT_ENABLE_GRADIENT            ACCENT_STATE = 1
   713  	ACCENT_ENABLE_TRANSPARENTGRADIENT ACCENT_STATE = 2
   714  	ACCENT_ENABLE_BLURBEHIND          ACCENT_STATE = 3
   715  	ACCENT_ENABLE_ACRYLICBLURBEHIND   ACCENT_STATE = 4 // RS4 1803
   716  	ACCENT_ENABLE_HOSTBACKDROP        ACCENT_STATE = 5 // RS5 1809
   717  	ACCENT_INVALID_STATE              ACCENT_STATE = 6
   718  )
   719  
   720  type ACCENT_POLICY struct {
   721  	AccentState   ACCENT_STATE
   722  	AccentFlags   DWORD
   723  	GradientColor DWORD
   724  	AnimationId   DWORD
   725  }
   726  
   727  type WINDOWCOMPOSITIONATTRIBDATA struct {
   728  	Attrib WINDOWCOMPOSITIONATTRIB
   729  	PvData PVOID
   730  	CbData SIZE_T
   731  }
   732  
   733  type WINDOWCOMPOSITIONATTRIB DWORD
   734  
   735  const (
   736  	WCA_UNDEFINED                     WINDOWCOMPOSITIONATTRIB = 0
   737  	WCA_NCRENDERING_ENABLED           WINDOWCOMPOSITIONATTRIB = 1
   738  	WCA_NCRENDERING_POLICY            WINDOWCOMPOSITIONATTRIB = 2
   739  	WCA_TRANSITIONS_FORCEDISABLED     WINDOWCOMPOSITIONATTRIB = 3
   740  	WCA_ALLOW_NCPAINT                 WINDOWCOMPOSITIONATTRIB = 4
   741  	WCA_CAPTION_BUTTON_BOUNDS         WINDOWCOMPOSITIONATTRIB = 5
   742  	WCA_NONCLIENT_RTL_LAYOUT          WINDOWCOMPOSITIONATTRIB = 6
   743  	WCA_FORCE_ICONIC_REPRESENTATION   WINDOWCOMPOSITIONATTRIB = 7
   744  	WCA_EXTENDED_FRAME_BOUNDS         WINDOWCOMPOSITIONATTRIB = 8
   745  	WCA_HAS_ICONIC_BITMAP             WINDOWCOMPOSITIONATTRIB = 9
   746  	WCA_THEME_ATTRIBUTES              WINDOWCOMPOSITIONATTRIB = 10
   747  	WCA_NCRENDERING_EXILED            WINDOWCOMPOSITIONATTRIB = 11
   748  	WCA_NCADORNMENTINFO               WINDOWCOMPOSITIONATTRIB = 12
   749  	WCA_EXCLUDED_FROM_LIVEPREVIEW     WINDOWCOMPOSITIONATTRIB = 13
   750  	WCA_VIDEO_OVERLAY_ACTIVE          WINDOWCOMPOSITIONATTRIB = 14
   751  	WCA_FORCE_ACTIVEWINDOW_APPEARANCE WINDOWCOMPOSITIONATTRIB = 15
   752  	WCA_DISALLOW_PEEK                 WINDOWCOMPOSITIONATTRIB = 16
   753  	WCA_CLOAK                         WINDOWCOMPOSITIONATTRIB = 17
   754  	WCA_CLOAKED                       WINDOWCOMPOSITIONATTRIB = 18
   755  	WCA_ACCENT_POLICY                 WINDOWCOMPOSITIONATTRIB = 19
   756  	WCA_FREEZE_REPRESENTATION         WINDOWCOMPOSITIONATTRIB = 20
   757  	WCA_EVER_UNCLOAKED                WINDOWCOMPOSITIONATTRIB = 21
   758  	WCA_VISUAL_OWNER                  WINDOWCOMPOSITIONATTRIB = 22
   759  	WCA_HOLOGRAPHIC                   WINDOWCOMPOSITIONATTRIB = 23
   760  	WCA_EXCLUDED_FROM_DDA             WINDOWCOMPOSITIONATTRIB = 24
   761  	WCA_PASSIVEUPDATEMODE             WINDOWCOMPOSITIONATTRIB = 25
   762  	WCA_USEDARKMODECOLORS             WINDOWCOMPOSITIONATTRIB = 26
   763  	WCA_CORNER_STYLE                  WINDOWCOMPOSITIONATTRIB = 27
   764  	WCA_PART_COLOR                    WINDOWCOMPOSITIONATTRIB = 28
   765  	WCA_DISABLE_MOVESIZE_FEEDBACK     WINDOWCOMPOSITIONATTRIB = 29
   766  	WCA_LAST                          WINDOWCOMPOSITIONATTRIB = 30
   767  )
   768  
   769  // -------------------------
   770  
   771  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms684225.aspx
   772  type MODULEENTRY32 struct {
   773  	Size         uint32
   774  	ModuleID     uint32
   775  	ProcessID    uint32
   776  	GlblcntUsage uint32
   777  	ProccntUsage uint32
   778  	ModBaseAddr  *uint8
   779  	ModBaseSize  uint32
   780  	HModule      HMODULE
   781  	SzModule     [MAX_MODULE_NAME32 + 1]uint16
   782  	SzExePath    [MAX_PATH]uint16
   783  }
   784  
   785  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284.aspx
   786  type FILETIME struct {
   787  	DwLowDateTime  uint32
   788  	DwHighDateTime uint32
   789  }
   790  
   791  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms682119.aspx
   792  type COORD struct {
   793  	X, Y int16
   794  }
   795  
   796  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms686311.aspx
   797  type SMALL_RECT struct {
   798  	Left, Top, Right, Bottom int16
   799  }
   800  
   801  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms682093.aspx
   802  type CONSOLE_SCREEN_BUFFER_INFO struct {
   803  	DwSize              COORD
   804  	DwCursorPosition    COORD
   805  	WAttributes         uint16
   806  	SrWindow            SMALL_RECT
   807  	DwMaximumWindowSize COORD
   808  }
   809  
   810  // http://msdn.microsoft.com/en-us/library/windows/desktop/bb773244.aspx
   811  type MARGINS struct {
   812  	CxLeftWidth, CxRightWidth, CyTopHeight, CyBottomHeight int32
   813  }
   814  
   815  // http://msdn.microsoft.com/en-us/library/windows/desktop/aa969500.aspx
   816  type DWM_BLURBEHIND struct {
   817  	DwFlags                uint32
   818  	fEnable                BOOL
   819  	hRgnBlur               HRGN
   820  	fTransitionOnMaximized BOOL
   821  }
   822  
   823  // http://msdn.microsoft.com/en-us/library/windows/desktop/aa969501.aspx
   824  type DWM_PRESENT_PARAMETERS struct {
   825  	cbSize             uint32
   826  	fQueue             BOOL
   827  	cRefreshStart      DWM_FRAME_COUNT
   828  	cBuffer            uint32
   829  	fUseSourceRate     BOOL
   830  	rateSource         UNSIGNED_RATIO
   831  	cRefreshesPerFrame uint32
   832  	eSampling          DWM_SOURCE_FRAME_SAMPLING
   833  }
   834  
   835  // http://msdn.microsoft.com/en-us/library/windows/desktop/aa969502.aspx
   836  type DWM_THUMBNAIL_PROPERTIES struct {
   837  	dwFlags               uint32
   838  	rcDestination         RECT
   839  	rcSource              RECT
   840  	opacity               byte
   841  	fVisible              BOOL
   842  	fSourceClientAreaOnly BOOL
   843  }
   844  
   845  // http://msdn.microsoft.com/en-us/library/windows/desktop/aa969503.aspx
   846  type DWM_TIMING_INFO struct {
   847  	cbSize                 uint32
   848  	rateRefresh            UNSIGNED_RATIO
   849  	qpcRefreshPeriod       QPC_TIME
   850  	rateCompose            UNSIGNED_RATIO
   851  	qpcVBlank              QPC_TIME
   852  	cRefresh               DWM_FRAME_COUNT
   853  	cDXRefresh             uint32
   854  	qpcCompose             QPC_TIME
   855  	cFrame                 DWM_FRAME_COUNT
   856  	cDXPresent             uint32
   857  	cRefreshFrame          DWM_FRAME_COUNT
   858  	cFrameSubmitted        DWM_FRAME_COUNT
   859  	cDXPresentSubmitted    uint32
   860  	cFrameConfirmed        DWM_FRAME_COUNT
   861  	cDXPresentConfirmed    uint32
   862  	cRefreshConfirmed      DWM_FRAME_COUNT
   863  	cDXRefreshConfirmed    uint32
   864  	cFramesLate            DWM_FRAME_COUNT
   865  	cFramesOutstanding     uint32
   866  	cFrameDisplayed        DWM_FRAME_COUNT
   867  	qpcFrameDisplayed      QPC_TIME
   868  	cRefreshFrameDisplayed DWM_FRAME_COUNT
   869  	cFrameComplete         DWM_FRAME_COUNT
   870  	qpcFrameComplete       QPC_TIME
   871  	cFramePending          DWM_FRAME_COUNT
   872  	qpcFramePending        QPC_TIME
   873  	cFramesDisplayed       DWM_FRAME_COUNT
   874  	cFramesComplete        DWM_FRAME_COUNT
   875  	cFramesPending         DWM_FRAME_COUNT
   876  	cFramesAvailable       DWM_FRAME_COUNT
   877  	cFramesDropped         DWM_FRAME_COUNT
   878  	cFramesMissed          DWM_FRAME_COUNT
   879  	cRefreshNextDisplayed  DWM_FRAME_COUNT
   880  	cRefreshNextPresented  DWM_FRAME_COUNT
   881  	cRefreshesDisplayed    DWM_FRAME_COUNT
   882  	cRefreshesPresented    DWM_FRAME_COUNT
   883  	cRefreshStarted        DWM_FRAME_COUNT
   884  	cPixelsReceived        uint64
   885  	cPixelsDrawn           uint64
   886  	cBuffersEmpty          DWM_FRAME_COUNT
   887  }
   888  
   889  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd389402.aspx
   890  type MilMatrix3x2D struct {
   891  	S_11, S_12, S_21, S_22 float64
   892  	DX, DY                 float64
   893  }
   894  
   895  // http://msdn.microsoft.com/en-us/library/windows/desktop/aa969505.aspx
   896  type UNSIGNED_RATIO struct {
   897  	uiNumerator   uint32
   898  	uiDenominator uint32
   899  }
   900  
   901  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms632603.aspx
   902  type CREATESTRUCT struct {
   903  	CreateParams uintptr
   904  	Instance     HINSTANCE
   905  	Menu         HMENU
   906  	Parent       HWND
   907  	Cy, Cx       int32
   908  	Y, X         int32
   909  	Style        int32
   910  	Name         *uint16
   911  	Class        *uint16
   912  	dwExStyle    uint32
   913  }
   914  
   915  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd145065.aspx
   916  type MONITORINFO struct {
   917  	CbSize    uint32
   918  	RcMonitor RECT
   919  	RcWork    RECT
   920  	DwFlags   uint32
   921  }
   922  
   923  type WINDOWINFO struct {
   924  	CbSize          DWORD
   925  	RcWindow        RECT
   926  	RcClient        RECT
   927  	DwStyle         DWORD
   928  	DwExStyle       DWORD
   929  	DwWindowStatus  DWORD
   930  	CxWindowBorders UINT
   931  	CyWindowBorders UINT
   932  	AtomWindowType  ATOM
   933  	WCreatorVersion WORD
   934  }
   935  
   936  type MONITOR_DPI_TYPE int32
   937  
   938  const (
   939  	MDT_EFFECTIVE_DPI MONITOR_DPI_TYPE = 0
   940  	MDT_ANGULAR_DPI   MONITOR_DPI_TYPE = 1
   941  	MDT_RAW_DPI       MONITOR_DPI_TYPE = 2
   942  	MDT_DEFAULT       MONITOR_DPI_TYPE = 0
   943  )
   944  
   945  func (w *WINDOWINFO) isStyle(style DWORD) bool {
   946  	return w.DwStyle&style == style
   947  }
   948  
   949  func (w *WINDOWINFO) IsPopup() bool {
   950  	return w.isStyle(WS_POPUP)
   951  }
   952  
   953  func (m *MONITORINFO) Dump() {
   954  	fmt.Printf("MONITORINFO (%p)\n", m)
   955  	fmt.Printf("  CbSize   : %d\n", m.CbSize)
   956  	fmt.Printf("  RcMonitor: %s\n", &m.RcMonitor)
   957  	fmt.Printf("  RcWork   : %s\n", &m.RcWork)
   958  	fmt.Printf("  DwFlags  : %d\n", m.DwFlags)
   959  }
   960  
   961  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd145066.aspx
   962  type MONITORINFOEX struct {
   963  	MONITORINFO
   964  	SzDevice [CCHDEVICENAME]uint16
   965  }
   966  
   967  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd368826.aspx
   968  type PIXELFORMATDESCRIPTOR struct {
   969  	Size                   uint16
   970  	Version                uint16
   971  	DwFlags                uint32
   972  	IPixelType             byte
   973  	ColorBits              byte
   974  	RedBits, RedShift      byte
   975  	GreenBits, GreenShift  byte
   976  	BlueBits, BlueShift    byte
   977  	AlphaBits, AlphaShift  byte
   978  	AccumBits              byte
   979  	AccumRedBits           byte
   980  	AccumGreenBits         byte
   981  	AccumBlueBits          byte
   982  	AccumAlphaBits         byte
   983  	DepthBits, StencilBits byte
   984  	AuxBuffers             byte
   985  	ILayerType             byte
   986  	Reserved               byte
   987  	DwLayerMask            uint32
   988  	DwVisibleMask          uint32
   989  	DwDamageMask           uint32
   990  }
   991  
   992  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx
   993  type INPUT struct {
   994  	Type uint32
   995  	Mi   MOUSEINPUT
   996  	Ki   KEYBDINPUT
   997  	Hi   HARDWAREINPUT
   998  }
   999  
  1000  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspx
  1001  type MOUSEINPUT struct {
  1002  	Dx          int32
  1003  	Dy          int32
  1004  	MouseData   uint32
  1005  	DwFlags     uint32
  1006  	Time        uint32
  1007  	DwExtraInfo uintptr
  1008  }
  1009  
  1010  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms646271(v=vs.85).aspx
  1011  type KEYBDINPUT struct {
  1012  	WVk         uint16
  1013  	WScan       uint16
  1014  	DwFlags     uint32
  1015  	Time        uint32
  1016  	DwExtraInfo uintptr
  1017  }
  1018  
  1019  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms646269(v=vs.85).aspx
  1020  type HARDWAREINPUT struct {
  1021  	UMsg    uint32
  1022  	WParamL uint16
  1023  	WParamH uint16
  1024  }
  1025  
  1026  type KbdInput struct {
  1027  	typ uint32
  1028  	ki  KEYBDINPUT
  1029  }
  1030  
  1031  type MouseInput struct {
  1032  	typ uint32
  1033  	mi  MOUSEINPUT
  1034  }
  1035  
  1036  type HardwareInput struct {
  1037  	typ uint32
  1038  	hi  HARDWAREINPUT
  1039  }
  1040  
  1041  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
  1042  type SYSTEMTIME struct {
  1043  	Year         uint16
  1044  	Month        uint16
  1045  	DayOfWeek    uint16
  1046  	Day          uint16
  1047  	Hour         uint16
  1048  	Minute       uint16
  1049  	Second       uint16
  1050  	Milliseconds uint16
  1051  }
  1052  
  1053  // http://msdn.microsoft.com/en-us/library/windows/desktop/ms644967(v=vs.85).aspx
  1054  type KBDLLHOOKSTRUCT struct {
  1055  	VkCode      DWORD
  1056  	ScanCode    DWORD
  1057  	Flags       DWORD
  1058  	Time        DWORD
  1059  	DwExtraInfo ULONG_PTR
  1060  }
  1061  
  1062  type HOOKPROC func(int, WPARAM, LPARAM) LRESULT
  1063  
  1064  type WINDOWPLACEMENT struct {
  1065  	Length           uint32
  1066  	Flags            uint32
  1067  	ShowCmd          uint32
  1068  	PtMinPosition    POINT
  1069  	PtMaxPosition    POINT
  1070  	RcNormalPosition RECT
  1071  }
  1072  
  1073  type SCROLLINFO struct {
  1074  	CbSize    uint32
  1075  	FMask     uint32
  1076  	NMin      int32
  1077  	NMax      int32
  1078  	NPage     uint32
  1079  	NPos      int32
  1080  	NTrackPos int32
  1081  }