w32api.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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_TIP = 0x00000004
  59. NIF_INFO = 0x00000010
  60. NIF_MESSAGE = 0x00000001
  61. SW_HIDE = 0
  62. TPM_BOTTOMALIGN = 0x0020
  63. TPM_LEFTALIGN = 0x0000
  64. WM_CLOSE = 0x0010
  65. WM_USER = 0x0400
  66. WS_CAPTION = 0x00C00000
  67. WS_MAXIMIZEBOX = 0x00010000
  68. WS_MINIMIZEBOX = 0x00020000
  69. WS_OVERLAPPED = 0x00000000
  70. WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
  71. WS_SYSMENU = 0x00080000
  72. WS_THICKFRAME = 0x00040000
  73. )
  74. // Not sure if this is actually needed on windows
  75. func init() {
  76. runtime.LockOSThread()
  77. }
  78. // The POINT structure defines the x- and y- coordinates of a point.
  79. // https://msdn.microsoft.com/en-us/library/windows/desktop/dd162805(v=vs.85).aspx
  80. type point struct {
  81. X, Y int32
  82. }