w32api.go 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //go:build windows
  2. package wintray
  3. import (
  4. "runtime"
  5. "golang.org/x/sys/windows"
  6. )
  7. var (
  8. k32 = windows.NewLazySystemDLL("Kernel32.dll")
  9. u32 = windows.NewLazySystemDLL("User32.dll")
  10. s32 = windows.NewLazySystemDLL("Shell32.dll")
  11. pCreatePopupMenu = u32.NewProc("CreatePopupMenu")
  12. pCreateWindowEx = u32.NewProc("CreateWindowExW")
  13. pDefWindowProc = u32.NewProc("DefWindowProcW")
  14. pDestroyWindow = u32.NewProc("DestroyWindow")
  15. pDispatchMessage = u32.NewProc("DispatchMessageW")
  16. pGetCursorPos = u32.NewProc("GetCursorPos")
  17. pGetMessage = u32.NewProc("GetMessageW")
  18. pGetModuleHandle = k32.NewProc("GetModuleHandleW")
  19. pInsertMenuItem = u32.NewProc("InsertMenuItemW")
  20. pLoadCursor = u32.NewProc("LoadCursorW")
  21. pLoadIcon = u32.NewProc("LoadIconW")
  22. pLoadImage = u32.NewProc("LoadImageW")
  23. pPostMessage = u32.NewProc("PostMessageW")
  24. pPostQuitMessage = u32.NewProc("PostQuitMessage")
  25. pRegisterClass = u32.NewProc("RegisterClassExW")
  26. pRegisterWindowMessage = u32.NewProc("RegisterWindowMessageW")
  27. pSetForegroundWindow = u32.NewProc("SetForegroundWindow")
  28. pSetMenuInfo = u32.NewProc("SetMenuInfo")
  29. pSetMenuItemInfo = u32.NewProc("SetMenuItemInfoW")
  30. pShellNotifyIcon = s32.NewProc("Shell_NotifyIconW")
  31. pShowWindow = u32.NewProc("ShowWindow")
  32. pTrackPopupMenu = u32.NewProc("TrackPopupMenu")
  33. pTranslateMessage = u32.NewProc("TranslateMessage")
  34. pUnregisterClass = u32.NewProc("UnregisterClassW")
  35. pUpdateWindow = u32.NewProc("UpdateWindow")
  36. )
  37. const (
  38. CS_HREDRAW = 0x0002
  39. CS_VREDRAW = 0x0001
  40. CW_USEDEFAULT = 0x80000000
  41. IDC_ARROW = 32512 // Standard arrow
  42. IDI_APPLICATION = 32512
  43. IMAGE_ICON = 1 // Loads an icon
  44. LR_DEFAULTSIZE = 0x00000040 // Loads default-size icon for windows(SM_CXICON x SM_CYICON) if cx, cy are set to zero
  45. LR_LOADFROMFILE = 0x00000010 // Loads the stand-alone image from the file
  46. MF_BYCOMMAND = 0x00000000
  47. MFS_DISABLED = 0x00000003
  48. MFT_SEPARATOR = 0x00000800
  49. MFT_STRING = 0x00000000
  50. MIIM_BITMAP = 0x00000080
  51. MIIM_FTYPE = 0x00000100
  52. MIIM_ID = 0x00000002
  53. MIIM_STATE = 0x00000001
  54. MIIM_STRING = 0x00000040
  55. MIIM_SUBMENU = 0x00000004
  56. MIM_APPLYTOSUBMENUS = 0x80000000
  57. NIF_ICON = 0x00000002
  58. NIF_INFO = 0x00000010
  59. NIF_MESSAGE = 0x00000001
  60. SW_HIDE = 0
  61. TPM_BOTTOMALIGN = 0x0020
  62. TPM_LEFTALIGN = 0x0000
  63. WM_CLOSE = 0x0010
  64. WM_USER = 0x0400
  65. WS_CAPTION = 0x00C00000
  66. WS_MAXIMIZEBOX = 0x00010000
  67. WS_MINIMIZEBOX = 0x00020000
  68. WS_OVERLAPPED = 0x00000000
  69. WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
  70. WS_SYSMENU = 0x00080000
  71. WS_THICKFRAME = 0x00040000
  72. )
  73. // Not sure if this is actually needed on windows
  74. func init() {
  75. runtime.LockOSThread()
  76. }
  77. // The POINT structure defines the x- and y- coordinates of a point.
  78. // https://msdn.microsoft.com/en-us/library/windows/desktop/dd162805(v=vs.85).aspx
  79. type point struct {
  80. X, Y int32
  81. }