github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/platform/win32/consts.go (about) 1 //go:build windows 2 3 package win32 4 5 import ( 6 "fmt" 7 "syscall" 8 "unsafe" 9 10 "github.com/AlpineAIO/wails/v2/internal/system/operatingsystem" 11 "golang.org/x/sys/windows" 12 ) 13 14 var ( 15 modKernel32 = syscall.NewLazyDLL("kernel32.dll") 16 procGetModuleHandle = modKernel32.NewProc("GetModuleHandleW") 17 18 moduser32 = syscall.NewLazyDLL("user32.dll") 19 procRegisterClassEx = moduser32.NewProc("RegisterClassExW") 20 procLoadIcon = moduser32.NewProc("LoadIconW") 21 procLoadCursor = moduser32.NewProc("LoadCursorW") 22 procCreateWindowEx = moduser32.NewProc("CreateWindowExW") 23 procPostMessage = moduser32.NewProc("PostMessageW") 24 procGetCursorPos = moduser32.NewProc("GetCursorPos") 25 procSetForegroundWindow = moduser32.NewProc("SetForegroundWindow") 26 procCreatePopupMenu = moduser32.NewProc("CreatePopupMenu") 27 procTrackPopupMenu = moduser32.NewProc("TrackPopupMenu") 28 procDestroyMenu = moduser32.NewProc("DestroyMenu") 29 procAppendMenuW = moduser32.NewProc("AppendMenuW") 30 procCheckMenuItem = moduser32.NewProc("CheckMenuItem") 31 procCheckMenuRadioItem = moduser32.NewProc("CheckMenuRadioItem") 32 procCreateIconFromResourceEx = moduser32.NewProc("CreateIconFromResourceEx") 33 procGetMessageW = moduser32.NewProc("GetMessageW") 34 procIsDialogMessage = moduser32.NewProc("IsDialogMessageW") 35 procTranslateMessage = moduser32.NewProc("TranslateMessage") 36 procDispatchMessage = moduser32.NewProc("DispatchMessageW") 37 procPostQuitMessage = moduser32.NewProc("PostQuitMessage") 38 procSystemParametersInfo = moduser32.NewProc("SystemParametersInfoW") 39 procSetWindowCompositionAttribute = moduser32.NewProc("SetWindowCompositionAttribute") 40 procGetKeyState = moduser32.NewProc("GetKeyState") 41 procCreateAcceleratorTable = moduser32.NewProc("CreateAcceleratorTableW") 42 procTranslateAccelerator = moduser32.NewProc("TranslateAcceleratorW") 43 44 modshell32 = syscall.NewLazyDLL("shell32.dll") 45 procShellNotifyIcon = modshell32.NewProc("Shell_NotifyIconW") 46 47 moddwmapi = syscall.NewLazyDLL("dwmapi.dll") 48 procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute") 49 50 moduxtheme = syscall.NewLazyDLL("uxtheme.dll") 51 procSetWindowTheme = moduxtheme.NewProc("SetWindowTheme") 52 53 AllowDarkModeForWindow func(HWND, bool) uintptr 54 SetPreferredAppMode func(int32) uintptr 55 ) 56 57 type PreferredAppMode = int32 58 59 const ( 60 PreferredAppModeDefault PreferredAppMode = iota 61 PreferredAppModeAllowDark 62 PreferredAppModeForceDark 63 PreferredAppModeForceLight 64 PreferredAppModeMax 65 ) 66 67 /* 68 RtlGetNtVersionNumbers = void (LPDWORD major, LPDWORD minor, LPDWORD build) // 1809 17763 69 ShouldAppsUseDarkMode = bool () // ordinal 132 70 AllowDarkModeForWindow = bool (HWND hWnd, bool allow) // ordinal 133 71 AllowDarkModeForApp = bool (bool allow) // ordinal 135, removed since 18334 72 FlushMenuThemes = void () // ordinal 136 73 RefreshImmersiveColorPolicyState = void () // ordinal 104 74 IsDarkModeAllowedForWindow = bool (HWND hWnd) // ordinal 137 75 GetIsImmersiveColorUsingHighContrast = bool (IMMERSIVE_HC_CACHE_MODE mode) // ordinal 106 76 OpenNcThemeData = HTHEME (HWND hWnd, LPCWSTR pszClassList) // ordinal 49 77 // Insider 18290 78 ShouldSystemUseDarkMode = bool () // ordinal 138 79 // Insider 18334 80 SetPreferredAppMode = PreferredAppMode (PreferredAppMode appMode) // ordinal 135, since 18334 81 IsDarkModeAllowedForApp = bool () // ordinal 139 82 */ 83 func init() { 84 if IsWindowsVersionAtLeast(10, 0, 18334) { 85 86 // AllowDarkModeForWindow is only available on Windows 10+ 87 uxtheme, err := windows.LoadLibrary("uxtheme.dll") 88 if err == nil { 89 procAllowDarkModeForWindow, err := windows.GetProcAddressByOrdinal(uxtheme, uintptr(133)) 90 if err == nil { 91 AllowDarkModeForWindow = func(hwnd HWND, allow bool) uintptr { 92 var allowInt int32 93 if allow { 94 allowInt = 1 95 } 96 ret, _, _ := syscall.SyscallN(procAllowDarkModeForWindow, uintptr(hwnd), uintptr(allowInt)) 97 return ret 98 } 99 } 100 } 101 102 // SetPreferredAppMode is only available on Windows 10+ 103 procSetPreferredAppMode, err := windows.GetProcAddressByOrdinal(uxtheme, uintptr(135)) 104 if err == nil { 105 SetPreferredAppMode = func(mode int32) uintptr { 106 ret, _, _ := syscall.SyscallN(procSetPreferredAppMode, uintptr(mode)) 107 return ret 108 } 109 SetPreferredAppMode(PreferredAppModeAllowDark) 110 } 111 } 112 113 } 114 115 type HANDLE uintptr 116 type HINSTANCE = HANDLE 117 type HICON = HANDLE 118 type HCURSOR = HANDLE 119 type HBRUSH = HANDLE 120 type HWND = HANDLE 121 type HMENU = HANDLE 122 type DWORD = uint32 123 type ATOM uint16 124 type MenuID uint16 125 126 const ( 127 WM_APP = 32768 128 WM_ACTIVATE = 6 129 WM_ACTIVATEAPP = 28 130 WM_AFXFIRST = 864 131 WM_AFXLAST = 895 132 WM_ASKCBFORMATNAME = 780 133 WM_CANCELJOURNAL = 75 134 WM_CANCELMODE = 31 135 WM_CAPTURECHANGED = 533 136 WM_CHANGECBCHAIN = 781 137 WM_CHAR = 258 138 WM_CHARTOITEM = 47 139 WM_CHILDACTIVATE = 34 140 WM_CLEAR = 771 141 WM_CLOSE = 16 142 WM_COMMAND = 273 143 WM_COMMNOTIFY = 68 /* OBSOLETE */ 144 WM_COMPACTING = 65 145 WM_COMPAREITEM = 57 146 WM_CONTEXTMENU = 123 147 WM_COPY = 769 148 WM_COPYDATA = 74 149 WM_CREATE = 1 150 WM_CTLCOLORBTN = 309 151 WM_CTLCOLORDLG = 310 152 WM_CTLCOLOREDIT = 307 153 WM_CTLCOLORLISTBOX = 308 154 WM_CTLCOLORMSGBOX = 306 155 WM_CTLCOLORSCROLLBAR = 311 156 WM_CTLCOLORSTATIC = 312 157 WM_CUT = 768 158 WM_DEADCHAR = 259 159 WM_DELETEITEM = 45 160 WM_DESTROY = 2 161 WM_DESTROYCLIPBOARD = 775 162 WM_DEVICECHANGE = 537 163 WM_DEVMODECHANGE = 27 164 WM_DISPLAYCHANGE = 126 165 WM_DRAWCLIPBOARD = 776 166 WM_DRAWITEM = 43 167 WM_DROPFILES = 563 168 WM_ENABLE = 10 169 WM_ENDSESSION = 22 170 WM_ENTERIDLE = 289 171 WM_ENTERMENULOOP = 529 172 WM_ENTERSIZEMOVE = 561 173 WM_ERASEBKGND = 20 174 WM_EXITMENULOOP = 530 175 WM_EXITSIZEMOVE = 562 176 WM_FONTCHANGE = 29 177 WM_GETDLGCODE = 135 178 WM_GETFONT = 49 179 WM_GETHOTKEY = 51 180 WM_GETICON = 127 181 WM_GETMINMAXINFO = 36 182 WM_GETTEXT = 13 183 WM_GETTEXTLENGTH = 14 184 WM_HANDHELDFIRST = 856 185 WM_HANDHELDLAST = 863 186 WM_HELP = 83 187 WM_HOTKEY = 786 188 WM_HSCROLL = 276 189 WM_HSCROLLCLIPBOARD = 782 190 WM_ICONERASEBKGND = 39 191 WM_INITDIALOG = 272 192 WM_INITMENU = 278 193 WM_INITMENUPOPUP = 279 194 WM_INPUT = 0x00FF 195 WM_INPUTLANGCHANGE = 81 196 WM_INPUTLANGCHANGEREQUEST = 80 197 WM_KEYDOWN = 256 198 WM_KEYUP = 257 199 WM_KILLFOCUS = 8 200 WM_MDIACTIVATE = 546 201 WM_MDICASCADE = 551 202 WM_MDICREATE = 544 203 WM_MDIDESTROY = 545 204 WM_MDIGETACTIVE = 553 205 WM_MDIICONARRANGE = 552 206 WM_MDIMAXIMIZE = 549 207 WM_MDINEXT = 548 208 WM_MDIREFRESHMENU = 564 209 WM_MDIRESTORE = 547 210 WM_MDISETMENU = 560 211 WM_MDITILE = 550 212 WM_MEASUREITEM = 44 213 WM_GETOBJECT = 0x003D 214 WM_CHANGEUISTATE = 0x0127 215 WM_UPDATEUISTATE = 0x0128 216 WM_QUERYUISTATE = 0x0129 217 WM_UNINITMENUPOPUP = 0x0125 218 WM_MENURBUTTONUP = 290 219 WM_MENUCOMMAND = 0x0126 220 WM_MENUGETOBJECT = 0x0124 221 WM_MENUDRAG = 0x0123 222 WM_APPCOMMAND = 0x0319 223 WM_MENUCHAR = 288 224 WM_MENUSELECT = 287 225 WM_MOVE = 3 226 WM_MOVING = 534 227 WM_NCACTIVATE = 134 228 WM_NCCALCSIZE = 131 229 WM_NCCREATE = 129 230 WM_NCDESTROY = 130 231 WM_NCHITTEST = 132 232 WM_NCLBUTTONDBLCLK = 163 233 WM_NCLBUTTONDOWN = 161 234 WM_NCLBUTTONUP = 162 235 WM_NCMBUTTONDBLCLK = 169 236 WM_NCMBUTTONDOWN = 167 237 WM_NCMBUTTONUP = 168 238 WM_NCXBUTTONDOWN = 171 239 WM_NCXBUTTONUP = 172 240 WM_NCXBUTTONDBLCLK = 173 241 WM_NCMOUSEHOVER = 0x02A0 242 WM_NCMOUSELEAVE = 0x02A2 243 WM_NCMOUSEMOVE = 160 244 WM_NCPAINT = 133 245 WM_NCRBUTTONDBLCLK = 166 246 WM_NCRBUTTONDOWN = 164 247 WM_NCRBUTTONUP = 165 248 WM_NEXTDLGCTL = 40 249 WM_NEXTMENU = 531 250 WM_NOTIFY = 78 251 WM_NOTIFYFORMAT = 85 252 WM_NULL = 0 253 WM_PAINT = 15 254 WM_PAINTCLIPBOARD = 777 255 WM_PAINTICON = 38 256 WM_PALETTECHANGED = 785 257 WM_PALETTEISCHANGING = 784 258 WM_PARENTNOTIFY = 528 259 WM_PASTE = 770 260 WM_PENWINFIRST = 896 261 WM_PENWINLAST = 911 262 WM_POWER = 72 263 WM_PRINT = 791 264 WM_PRINTCLIENT = 792 265 WM_QUERYDRAGICON = 55 266 WM_QUERYENDSESSION = 17 267 WM_QUERYNEWPALETTE = 783 268 WM_QUERYOPEN = 19 269 WM_QUEUESYNC = 35 270 WM_QUIT = 18 271 WM_RENDERALLFORMATS = 774 272 WM_RENDERFORMAT = 773 273 WM_SETCURSOR = 32 274 WM_SETFOCUS = 7 275 WM_SETFONT = 48 276 WM_SETHOTKEY = 50 277 WM_SETICON = 128 278 WM_SETREDRAW = 11 279 WM_SETTEXT = 12 280 WM_SETTINGCHANGE = 26 281 WM_SHOWWINDOW = 24 282 WM_SIZE = 5 283 WM_SIZECLIPBOARD = 779 284 WM_SIZING = 532 285 WM_SPOOLERSTATUS = 42 286 WM_STYLECHANGED = 125 287 WM_STYLECHANGING = 124 288 WM_SYSCHAR = 262 289 WM_SYSCOLORCHANGE = 21 290 WM_SYSCOMMAND = 274 291 WM_SYSDEADCHAR = 263 292 WM_SYSKEYDOWN = 260 293 WM_SYSKEYUP = 261 294 WM_TCARD = 82 295 WM_THEMECHANGED = 794 296 WM_TIMECHANGE = 30 297 WM_TIMER = 275 298 WM_UNDO = 772 299 WM_USER = 1024 300 WM_USERCHANGED = 84 301 WM_VKEYTOITEM = 46 302 WM_VSCROLL = 277 303 WM_VSCROLLCLIPBOARD = 778 304 WM_WINDOWPOSCHANGED = 71 305 WM_WINDOWPOSCHANGING = 70 306 WM_WININICHANGE = 26 307 WM_KEYFIRST = 256 308 WM_KEYLAST = 264 309 WM_SYNCPAINT = 136 310 WM_MOUSEACTIVATE = 33 311 WM_MOUSEMOVE = 512 312 WM_LBUTTONDOWN = 513 313 WM_LBUTTONUP = 514 314 WM_LBUTTONDBLCLK = 515 315 WM_RBUTTONDOWN = 516 316 WM_RBUTTONUP = 517 317 WM_RBUTTONDBLCLK = 518 318 WM_MBUTTONDOWN = 519 319 WM_MBUTTONUP = 520 320 WM_MBUTTONDBLCLK = 521 321 WM_MOUSEWHEEL = 522 322 WM_MOUSEFIRST = 512 323 WM_XBUTTONDOWN = 523 324 WM_XBUTTONUP = 524 325 WM_XBUTTONDBLCLK = 525 326 WM_MOUSELAST = 525 327 WM_MOUSEHOVER = 0x2A1 328 WM_MOUSELEAVE = 0x2A3 329 WM_CLIPBOARDUPDATE = 0x031D 330 331 WS_EX_APPWINDOW = 0x00040000 332 WS_OVERLAPPEDWINDOW = 0x00000000 | 0x00C00000 | 0x00080000 | 0x00040000 | 0x00020000 | 0x00010000 333 WS_EX_NOREDIRECTIONBITMAP = 0x00200000 334 CW_USEDEFAULT = ^0x7fffffff 335 336 NIM_ADD = 0x00000000 337 NIM_MODIFY = 0x00000001 338 NIM_DELETE = 0x00000002 339 NIM_SETVERSION = 0x00000004 340 341 NIF_MESSAGE = 0x00000001 342 NIF_ICON = 0x00000002 343 NIF_TIP = 0x00000004 344 NIF_STATE = 0x00000008 345 NIF_INFO = 0x00000010 346 347 NIS_HIDDEN = 0x00000001 348 349 NIIF_NONE = 0x00000000 350 NIIF_INFO = 0x00000001 351 NIIF_WARNING = 0x00000002 352 NIIF_ERROR = 0x00000003 353 NIIF_USER = 0x00000004 354 NIIF_NOSOUND = 0x00000010 355 NIIF_LARGE_ICON = 0x00000020 356 NIIF_RESPECT_QUIET_TIME = 0x00000080 357 NIIF_ICON_MASK = 0x0000000F 358 359 IMAGE_BITMAP = 0 360 IMAGE_ICON = 1 361 LR_LOADFROMFILE = 0x00000010 362 LR_DEFAULTSIZE = 0x00000040 363 364 IDC_ARROW = 32512 365 COLOR_WINDOW = 5 366 COLOR_BTNFACE = 15 367 368 GWLP_USERDATA = -21 369 WS_CLIPSIBLINGS = 0x04000000 370 WS_EX_CONTROLPARENT = 0x00010000 371 372 HWND_MESSAGE = ^HWND(2) 373 NOTIFYICON_VERSION = 4 374 375 IDI_APPLICATION = 32512 376 377 MenuItemMsgID = WM_APP + 1024 378 NotifyIconMessageId = WM_APP + iota 379 380 MF_STRING = 0x00000000 381 MF_ENABLED = 0x00000000 382 MF_GRAYED = 0x00000001 383 MF_DISABLED = 0x00000002 384 MF_SEPARATOR = 0x00000800 385 MF_UNCHECKED = 0x00000000 386 MF_CHECKED = 0x00000008 387 MF_POPUP = 0x00000010 388 MF_MENUBARBREAK = 0x00000020 389 MF_BYCOMMAND = 0x00000000 390 391 TPM_LEFTALIGN = 0x0000 392 393 CS_VREDRAW = 0x0001 394 CS_HREDRAW = 0x0002 395 ) 396 397 func WMMessageToString(msg uintptr) string { 398 // Convert windows message to string 399 switch msg { 400 case WM_APP: 401 return "WM_APP" 402 case WM_ACTIVATE: 403 return "WM_ACTIVATE" 404 case WM_ACTIVATEAPP: 405 return "WM_ACTIVATEAPP" 406 case WM_AFXFIRST: 407 return "WM_AFXFIRST" 408 case WM_AFXLAST: 409 return "WM_AFXLAST" 410 case WM_ASKCBFORMATNAME: 411 return "WM_ASKCBFORMATNAME" 412 case WM_CANCELJOURNAL: 413 return "WM_CANCELJOURNAL" 414 case WM_CANCELMODE: 415 return "WM_CANCELMODE" 416 case WM_CAPTURECHANGED: 417 return "WM_CAPTURECHANGED" 418 case WM_CHANGECBCHAIN: 419 return "WM_CHANGECBCHAIN" 420 case WM_CHAR: 421 return "WM_CHAR" 422 case WM_CHARTOITEM: 423 return "WM_CHARTOITEM" 424 case WM_CHILDACTIVATE: 425 return "WM_CHILDACTIVATE" 426 case WM_CLEAR: 427 return "WM_CLEAR" 428 case WM_CLOSE: 429 return "WM_CLOSE" 430 case WM_COMMAND: 431 return "WM_COMMAND" 432 case WM_COMMNOTIFY /* OBSOLETE */ : 433 return "WM_COMMNOTIFY" 434 case WM_COMPACTING: 435 return "WM_COMPACTING" 436 case WM_COMPAREITEM: 437 return "WM_COMPAREITEM" 438 case WM_CONTEXTMENU: 439 return "WM_CONTEXTMENU" 440 case WM_COPY: 441 return "WM_COPY" 442 case WM_COPYDATA: 443 return "WM_COPYDATA" 444 case WM_CREATE: 445 return "WM_CREATE" 446 case WM_CTLCOLORBTN: 447 return "WM_CTLCOLORBTN" 448 case WM_CTLCOLORDLG: 449 return "WM_CTLCOLORDLG" 450 case WM_CTLCOLOREDIT: 451 return "WM_CTLCOLOREDIT" 452 case WM_CTLCOLORLISTBOX: 453 return "WM_CTLCOLORLISTBOX" 454 case WM_CTLCOLORMSGBOX: 455 return "WM_CTLCOLORMSGBOX" 456 case WM_CTLCOLORSCROLLBAR: 457 return "WM_CTLCOLORSCROLLBAR" 458 case WM_CTLCOLORSTATIC: 459 return "WM_CTLCOLORSTATIC" 460 case WM_CUT: 461 return "WM_CUT" 462 case WM_DEADCHAR: 463 return "WM_DEADCHAR" 464 case WM_DELETEITEM: 465 return "WM_DELETEITEM" 466 case WM_DESTROY: 467 return "WM_DESTROY" 468 case WM_DESTROYCLIPBOARD: 469 return "WM_DESTROYCLIPBOARD" 470 case WM_DEVICECHANGE: 471 return "WM_DEVICECHANGE" 472 case WM_DEVMODECHANGE: 473 return "WM_DEVMODECHANGE" 474 case WM_DISPLAYCHANGE: 475 return "WM_DISPLAYCHANGE" 476 case WM_DRAWCLIPBOARD: 477 return "WM_DRAWCLIPBOARD" 478 case WM_DRAWITEM: 479 return "WM_DRAWITEM" 480 case WM_DROPFILES: 481 return "WM_DROPFILES" 482 case WM_ENABLE: 483 return "WM_ENABLE" 484 case WM_ENDSESSION: 485 return "WM_ENDSESSION" 486 case WM_ENTERIDLE: 487 return "WM_ENTERIDLE" 488 case WM_ENTERMENULOOP: 489 return "WM_ENTERMENULOOP" 490 case WM_ENTERSIZEMOVE: 491 return "WM_ENTERSIZEMOVE" 492 case WM_ERASEBKGND: 493 return "WM_ERASEBKGND" 494 case WM_EXITMENULOOP: 495 return "WM_EXITMENULOOP" 496 case WM_EXITSIZEMOVE: 497 return "WM_EXITSIZEMOVE" 498 case WM_FONTCHANGE: 499 return "WM_FONTCHANGE" 500 case WM_GETDLGCODE: 501 return "WM_GETDLGCODE" 502 case WM_GETFONT: 503 return "WM_GETFONT" 504 case WM_GETHOTKEY: 505 return "WM_GETHOTKEY" 506 case WM_GETICON: 507 return "WM_GETICON" 508 case WM_GETMINMAXINFO: 509 return "WM_GETMINMAXINFO" 510 case WM_GETTEXT: 511 return "WM_GETTEXT" 512 case WM_GETTEXTLENGTH: 513 return "WM_GETTEXTLENGTH" 514 case WM_HANDHELDFIRST: 515 return "WM_HANDHELDFIRST" 516 case WM_HANDHELDLAST: 517 return "WM_HANDHELDLAST" 518 case WM_HELP: 519 return "WM_HELP" 520 case WM_HOTKEY: 521 return "WM_HOTKEY" 522 case WM_HSCROLL: 523 return "WM_HSCROLL" 524 case WM_HSCROLLCLIPBOARD: 525 return "WM_HSCROLLCLIPBOARD" 526 case WM_ICONERASEBKGND: 527 return "WM_ICONERASEBKGND" 528 case WM_INITDIALOG: 529 return "WM_INITDIALOG" 530 case WM_INITMENU: 531 return "WM_INITMENU" 532 case WM_INITMENUPOPUP: 533 return "WM_INITMENUPOPUP" 534 case WM_INPUT: 535 return "WM_INPUT" 536 case WM_INPUTLANGCHANGE: 537 return "WM_INPUTLANGCHANGE" 538 case WM_INPUTLANGCHANGEREQUEST: 539 return "WM_INPUTLANGCHANGEREQUEST" 540 case WM_KEYDOWN: 541 return "WM_KEYDOWN" 542 case WM_KEYUP: 543 return "WM_KEYUP" 544 case WM_KILLFOCUS: 545 return "WM_KILLFOCUS" 546 case WM_MDIACTIVATE: 547 return "WM_MDIACTIVATE" 548 case WM_MDICASCADE: 549 return "WM_MDICASCADE" 550 case WM_MDICREATE: 551 return "WM_MDICREATE" 552 case WM_MDIDESTROY: 553 return "WM_MDIDESTROY" 554 case WM_MDIGETACTIVE: 555 return "WM_MDIGETACTIVE" 556 case WM_MDIICONARRANGE: 557 return "WM_MDIICONARRANGE" 558 case WM_MDIMAXIMIZE: 559 return "WM_MDIMAXIMIZE" 560 case WM_MDINEXT: 561 return "WM_MDINEXT" 562 case WM_MDIREFRESHMENU: 563 return "WM_MDIREFRESHMENU" 564 case WM_MDIRESTORE: 565 return "WM_MDIRESTORE" 566 case WM_MDISETMENU: 567 return "WM_MDISETMENU" 568 case WM_MDITILE: 569 return "WM_MDITILE" 570 case WM_MEASUREITEM: 571 return "WM_MEASUREITEM" 572 case WM_GETOBJECT: 573 return "WM_GETOBJECT" 574 case WM_CHANGEUISTATE: 575 return "WM_CHANGEUISTATE" 576 case WM_UPDATEUISTATE: 577 return "WM_UPDATEUISTATE" 578 case WM_QUERYUISTATE: 579 return "WM_QUERYUISTATE" 580 case WM_UNINITMENUPOPUP: 581 return "WM_UNINITMENUPOPUP" 582 case WM_MENURBUTTONUP: 583 return "WM_MENURBUTTONUP" 584 case WM_MENUCOMMAND: 585 return "WM_MENUCOMMAND" 586 case WM_MENUGETOBJECT: 587 return "WM_MENUGETOBJECT" 588 case WM_MENUDRAG: 589 return "WM_MENUDRAG" 590 case WM_APPCOMMAND: 591 return "WM_APPCOMMAND" 592 case WM_MENUCHAR: 593 return "WM_MENUCHAR" 594 case WM_MENUSELECT: 595 return "WM_MENUSELECT" 596 case WM_MOVE: 597 return "WM_MOVE" 598 case WM_MOVING: 599 return "WM_MOVING" 600 case WM_NCACTIVATE: 601 return "WM_NCACTIVATE" 602 case WM_NCCALCSIZE: 603 return "WM_NCCALCSIZE" 604 case WM_NCCREATE: 605 return "WM_NCCREATE" 606 case WM_NCDESTROY: 607 return "WM_NCDESTROY" 608 case WM_NCHITTEST: 609 return "WM_NCHITTEST" 610 case WM_NCLBUTTONDBLCLK: 611 return "WM_NCLBUTTONDBLCLK" 612 case WM_NCLBUTTONDOWN: 613 return "WM_NCLBUTTONDOWN" 614 case WM_NCLBUTTONUP: 615 return "WM_NCLBUTTONUP" 616 case WM_NCMBUTTONDBLCLK: 617 return "WM_NCMBUTTONDBLCLK" 618 case WM_NCMBUTTONDOWN: 619 return "WM_NCMBUTTONDOWN" 620 case WM_NCMBUTTONUP: 621 return "WM_NCMBUTTONUP" 622 case WM_NCXBUTTONDOWN: 623 return "WM_NCXBUTTONDOWN" 624 case WM_NCXBUTTONUP: 625 return "WM_NCXBUTTONUP" 626 case WM_NCXBUTTONDBLCLK: 627 return "WM_NCXBUTTONDBLCLK" 628 case WM_NCMOUSEHOVER: 629 return "WM_NCMOUSEHOVER" 630 case WM_NCMOUSELEAVE: 631 return "WM_NCMOUSELEAVE" 632 case WM_NCMOUSEMOVE: 633 return "WM_NCMOUSEMOVE" 634 case WM_NCPAINT: 635 return "WM_NCPAINT" 636 case WM_NCRBUTTONDBLCLK: 637 return "WM_NCRBUTTONDBLCLK" 638 case WM_NCRBUTTONDOWN: 639 return "WM_NCRBUTTONDOWN" 640 case WM_NCRBUTTONUP: 641 return "WM_NCRBUTTONUP" 642 case WM_NEXTDLGCTL: 643 return "WM_NEXTDLGCTL" 644 case WM_NEXTMENU: 645 return "WM_NEXTMENU" 646 case WM_NOTIFY: 647 return "WM_NOTIFY" 648 case WM_NOTIFYFORMAT: 649 return "WM_NOTIFYFORMAT" 650 case WM_NULL: 651 return "WM_NULL" 652 case WM_PAINT: 653 return "WM_PAINT" 654 case WM_PAINTCLIPBOARD: 655 return "WM_PAINTCLIPBOARD" 656 case WM_PAINTICON: 657 return "WM_PAINTICON" 658 case WM_PALETTECHANGED: 659 return "WM_PALETTECHANGED" 660 case WM_PALETTEISCHANGING: 661 return "WM_PALETTEISCHANGING" 662 case WM_PARENTNOTIFY: 663 return "WM_PARENTNOTIFY" 664 case WM_PASTE: 665 return "WM_PASTE" 666 case WM_PENWINFIRST: 667 return "WM_PENWINFIRST" 668 case WM_PENWINLAST: 669 return "WM_PENWINLAST" 670 case WM_POWER: 671 return "WM_POWER" 672 case WM_PRINT: 673 return "WM_PRINT" 674 case WM_PRINTCLIENT: 675 return "WM_PRINTCLIENT" 676 case WM_QUERYDRAGICON: 677 return "WM_QUERYDRAGICON" 678 case WM_QUERYENDSESSION: 679 return "WM_QUERYENDSESSION" 680 case WM_QUERYNEWPALETTE: 681 return "WM_QUERYNEWPALETTE" 682 case WM_QUERYOPEN: 683 return "WM_QUERYOPEN" 684 case WM_QUEUESYNC: 685 return "WM_QUEUESYNC" 686 case WM_QUIT: 687 return "WM_QUIT" 688 case WM_RENDERALLFORMATS: 689 return "WM_RENDERALLFORMATS" 690 case WM_RENDERFORMAT: 691 return "WM_RENDERFORMAT" 692 case WM_SETCURSOR: 693 return "WM_SETCURSOR" 694 case WM_SETFOCUS: 695 return "WM_SETFOCUS" 696 case WM_SETFONT: 697 return "WM_SETFONT" 698 case WM_SETHOTKEY: 699 return "WM_SETHOTKEY" 700 case WM_SETICON: 701 return "WM_SETICON" 702 case WM_SETREDRAW: 703 return "WM_SETREDRAW" 704 case WM_SETTEXT: 705 return "WM_SETTEXT" 706 case WM_SETTINGCHANGE: 707 return "WM_SETTINGCHANGE" 708 case WM_SHOWWINDOW: 709 return "WM_SHOWWINDOW" 710 case WM_SIZE: 711 return "WM_SIZE" 712 case WM_SIZECLIPBOARD: 713 return "WM_SIZECLIPBOARD" 714 case WM_SIZING: 715 return "WM_SIZING" 716 case WM_SPOOLERSTATUS: 717 return "WM_SPOOLERSTATUS" 718 case WM_STYLECHANGED: 719 return "WM_STYLECHANGED" 720 case WM_STYLECHANGING: 721 return "WM_STYLECHANGING" 722 case WM_SYSCHAR: 723 return "WM_SYSCHAR" 724 case WM_SYSCOLORCHANGE: 725 return "WM_SYSCOLORCHANGE" 726 case WM_SYSCOMMAND: 727 return "WM_SYSCOMMAND" 728 case WM_SYSDEADCHAR: 729 return "WM_SYSDEADCHAR" 730 case WM_SYSKEYDOWN: 731 return "WM_SYSKEYDOWN" 732 case WM_SYSKEYUP: 733 return "WM_SYSKEYUP" 734 case WM_TCARD: 735 return "WM_TCARD" 736 case WM_THEMECHANGED: 737 return "WM_THEMECHANGED" 738 case WM_TIMECHANGE: 739 return "WM_TIMECHANGE" 740 case WM_TIMER: 741 return "WM_TIMER" 742 case WM_UNDO: 743 return "WM_UNDO" 744 case WM_USER: 745 return "WM_USER" 746 case WM_USERCHANGED: 747 return "WM_USERCHANGED" 748 case WM_VKEYTOITEM: 749 return "WM_VKEYTOITEM" 750 case WM_VSCROLL: 751 return "WM_VSCROLL" 752 case WM_VSCROLLCLIPBOARD: 753 return "WM_VSCROLLCLIPBOARD" 754 case WM_WINDOWPOSCHANGED: 755 return "WM_WINDOWPOSCHANGED" 756 case WM_WINDOWPOSCHANGING: 757 return "WM_WINDOWPOSCHANGING" 758 case WM_KEYLAST: 759 return "WM_KEYLAST" 760 case WM_SYNCPAINT: 761 return "WM_SYNCPAINT" 762 case WM_MOUSEACTIVATE: 763 return "WM_MOUSEACTIVATE" 764 case WM_MOUSEMOVE: 765 return "WM_MOUSEMOVE" 766 case WM_LBUTTONDOWN: 767 return "WM_LBUTTONDOWN" 768 case WM_LBUTTONUP: 769 return "WM_LBUTTONUP" 770 case WM_LBUTTONDBLCLK: 771 return "WM_LBUTTONDBLCLK" 772 case WM_RBUTTONDOWN: 773 return "WM_RBUTTONDOWN" 774 case WM_RBUTTONUP: 775 return "WM_RBUTTONUP" 776 case WM_RBUTTONDBLCLK: 777 return "WM_RBUTTONDBLCLK" 778 case WM_MBUTTONDOWN: 779 return "WM_MBUTTONDOWN" 780 case WM_MBUTTONUP: 781 return "WM_MBUTTONUP" 782 case WM_MBUTTONDBLCLK: 783 return "WM_MBUTTONDBLCLK" 784 case WM_MOUSEWHEEL: 785 return "WM_MOUSEWHEEL" 786 case WM_XBUTTONDOWN: 787 return "WM_XBUTTONDOWN" 788 case WM_XBUTTONUP: 789 return "WM_XBUTTONUP" 790 case WM_MOUSELAST: 791 return "WM_MOUSELAST" 792 case WM_MOUSEHOVER: 793 return "WM_MOUSEHOVER" 794 case WM_MOUSELEAVE: 795 return "WM_MOUSELEAVE" 796 case WM_CLIPBOARDUPDATE: 797 return "WM_CLIPBOARDUPDATE" 798 default: 799 return fmt.Sprintf("0x%08x", msg) 800 } 801 } 802 803 var windowsVersion, _ = operatingsystem.GetWindowsVersionInfo() 804 805 func IsWindowsVersionAtLeast(major, minor, buildNumber int) bool { 806 return windowsVersion.Major >= major && 807 windowsVersion.Minor >= minor && 808 windowsVersion.Build >= buildNumber 809 } 810 811 type WindowProc func(hwnd HWND, msg uint32, wparam, lparam uintptr) uintptr 812 813 func GetModuleHandle(value uintptr) uintptr { 814 result, _, _ := procGetModuleHandle.Call(value) 815 return result 816 } 817 818 func GetMessage(msg *MSG) uintptr { 819 rt, _, _ := procGetMessageW.Call(uintptr(unsafe.Pointer(msg)), 0, 0, 0) 820 return rt 821 } 822 823 func PostMessage(hwnd HWND, msg uint32, wParam, lParam uintptr) uintptr { 824 ret, _, _ := procPostMessage.Call( 825 uintptr(hwnd), 826 uintptr(msg), 827 wParam, 828 lParam) 829 830 return ret 831 } 832 833 func ShellNotifyIcon(cmd uintptr, nid *NOTIFYICONDATA) bool { 834 ret, _, _ := procShellNotifyIcon.Call(cmd, uintptr(unsafe.Pointer(nid))) 835 return ret == 1 836 } 837 838 func IsDialogMessage(hwnd HWND, msg *MSG) uintptr { 839 ret, _, _ := procIsDialogMessage.Call(uintptr(hwnd), uintptr(unsafe.Pointer(msg))) 840 return ret 841 } 842 843 func TranslateMessage(msg *MSG) uintptr { 844 ret, _, _ := procTranslateMessage.Call(uintptr(unsafe.Pointer(msg))) 845 return ret 846 } 847 848 func DispatchMessage(msg *MSG) uintptr { 849 ret, _, _ := procDispatchMessage.Call(uintptr(unsafe.Pointer(msg))) 850 return ret 851 } 852 853 func PostQuitMessage(exitCode int32) { 854 procPostQuitMessage.Call(uintptr(exitCode)) 855 } 856 857 func LoHiWords(input uint32) (uint16, uint16) { 858 return uint16(input & 0xffff), uint16(input >> 16 & 0xffff) 859 }