9
9
"image/color"
10
10
"image/png"
11
11
"os"
12
- "syscall"
13
- "unsafe"
14
12
15
13
"github.com/wailsapp/wails/v3/pkg/application"
16
14
"github.com/wailsapp/wails/v3/pkg/w32"
@@ -19,95 +17,8 @@ import (
19
17
"golang.org/x/image/math/fixed"
20
18
)
21
19
22
- var (
23
- ole32 = syscall .NewLazyDLL ("ole32.dll" )
24
- coCreateInstance = ole32 .NewProc ("CoCreateInstance" )
25
- )
26
-
27
- const (
28
- CLSCTX_INPROC_SERVER = 0x1
29
- )
30
-
31
- var (
32
- CLSID_TaskbarList = syscall.GUID {0x56FDF344 , 0xFD6D , 0x11D0 , [8 ]byte {0x95 , 0x8A , 0x00 , 0x60 , 0x97 , 0xC9 , 0xA0 , 0x90 }}
33
- IID_ITaskbarList3 = syscall.GUID {0xEA1AFB91 , 0x9E28 , 0x4B86 , [8 ]byte {0x90 , 0xE9 , 0x9E , 0x9F , 0x8A , 0x5E , 0xEF , 0xAF }}
34
- )
35
-
36
- type ITaskbarList3 struct {
37
- lpVtbl * taskbarList3Vtbl
38
- }
39
-
40
- type taskbarList3Vtbl struct {
41
- QueryInterface uintptr
42
- AddRef uintptr
43
- Release uintptr
44
- HrInit uintptr
45
- AddTab uintptr
46
- DeleteTab uintptr
47
- ActivateTab uintptr
48
- SetActiveAlt uintptr
49
- MarkFullscreenWindow uintptr
50
- SetProgressValue uintptr
51
- SetProgressState uintptr
52
- RegisterTab uintptr
53
- UnregisterTab uintptr
54
- SetTabOrder uintptr
55
- SetTabActive uintptr
56
- ThumbBarAddButtons uintptr
57
- ThumbBarUpdateButtons uintptr
58
- ThumbBarSetImageList uintptr
59
- SetOverlayIcon uintptr
60
- SetThumbnailTooltip uintptr
61
- SetThumbnailClip uintptr
62
- }
63
-
64
- func newTaskbarList3 () (* ITaskbarList3 , error ) {
65
- const COINIT_APARTMENTTHREADED = 0x2
66
-
67
- coInit := ole32 .NewProc ("CoInitializeEx" )
68
- if hr , _ , _ := coInit .Call (0 , COINIT_APARTMENTTHREADED ); hr != 0 && hr != 0x1 {
69
- return nil , syscall .Errno (hr )
70
- }
71
-
72
- var taskbar * ITaskbarList3
73
- hr , _ , _ := coCreateInstance .Call (
74
- uintptr (unsafe .Pointer (& CLSID_TaskbarList )),
75
- 0 ,
76
- uintptr (CLSCTX_INPROC_SERVER ),
77
- uintptr (unsafe .Pointer (& IID_ITaskbarList3 )),
78
- uintptr (unsafe .Pointer (& taskbar )),
79
- )
80
-
81
- if hr != 0 {
82
- ole32 .NewProc ("CoUninitialize" ).Call ()
83
- return nil , syscall .Errno (hr )
84
- }
85
-
86
- if r , _ , _ := syscall .SyscallN (taskbar .lpVtbl .HrInit , uintptr (unsafe .Pointer (taskbar ))); r != 0 {
87
- syscall .SyscallN (taskbar .lpVtbl .Release , uintptr (unsafe .Pointer (taskbar )))
88
- ole32 .NewProc ("CoUninitialize" ).Call ()
89
- return nil , syscall .Errno (r )
90
- }
91
-
92
- return taskbar , nil
93
- }
94
-
95
- func (t * ITaskbarList3 ) SetOverlayIcon (hwnd syscall.Handle , hIcon syscall.Handle , description * uint16 ) error {
96
- ret , _ , _ := syscall .SyscallN (
97
- t .lpVtbl .SetOverlayIcon ,
98
- uintptr (unsafe .Pointer (t )),
99
- uintptr (hwnd ),
100
- uintptr (hIcon ),
101
- uintptr (unsafe .Pointer (description )),
102
- )
103
- if ret != 0 {
104
- return syscall .Errno (ret )
105
- }
106
- return nil
107
- }
108
-
109
20
type windowsBadge struct {
110
- taskbar * ITaskbarList3
21
+ taskbar * w32. ITaskbarList3
111
22
badgeImg * image.RGBA
112
23
badgeSize int
113
24
fontManager * FontManager
@@ -147,7 +58,7 @@ func NewWithOptions(options Options) *Service {
147
58
}
148
59
149
60
func (w * windowsBadge ) Startup (ctx context.Context , options application.ServiceOptions ) error {
150
- taskbar , err := newTaskbarList3 ()
61
+ taskbar , err := w32 . NewTaskbarList3 ()
151
62
if err != nil {
152
63
return err
153
64
}
@@ -159,8 +70,8 @@ func (w *windowsBadge) Startup(ctx context.Context, options application.ServiceO
159
70
160
71
func (w * windowsBadge ) Shutdown () error {
161
72
if w .taskbar != nil {
162
- syscall . SyscallN ( w .taskbar .lpVtbl . Release , uintptr ( unsafe . Pointer ( w . taskbar )) )
163
- ole32 . NewProc ( " CoUninitialize" ). Call ()
73
+ w .taskbar .Release ( )
74
+ w32 . CoUninitialize ()
164
75
}
165
76
166
77
return nil
@@ -202,7 +113,7 @@ func (w *windowsBadge) SetBadge(label string) error {
202
113
}
203
114
defer w32 .DestroyIcon (hicon )
204
115
205
- return w .taskbar .SetOverlayIcon (syscall . Handle ( hwnd ), syscall . Handle ( hicon ) , nil )
116
+ return w .taskbar .SetOverlayIcon (hwnd , hicon , nil )
206
117
}
207
118
208
119
func (w * windowsBadge ) RemoveBadge () error {
@@ -225,7 +136,7 @@ func (w *windowsBadge) RemoveBadge() error {
225
136
return err
226
137
}
227
138
228
- return w .taskbar .SetOverlayIcon (syscall . Handle ( hwnd ) , 0 , nil )
139
+ return w .taskbar .SetOverlayIcon (hwnd , 0 , nil )
229
140
}
230
141
231
142
func (w * windowsBadge ) createBadgeIcon () (w32.HICON , error ) {
0 commit comments