-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathshell32.go
126 lines (106 loc) · 2.88 KB
/
shell32.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package winapi
import (
"syscall"
"unsafe"
)
var (
modshell32 = syscall.NewLazyDLL("SHELL32.dll")
procShell_NotifyIconW = modshell32.NewProc("Shell_NotifyIconW")
procDllGetVersion = modshell32.NewProc("DllGetVersion")
)
const (
NIM_ADD = 0x00000000
NIM_MODIFY = 0x00000001
NIM_DELETE = 0x00000002
NIM_SETFOCUS = 0x00000003
NIM_SETVERSION = 0x00000004
)
const (
NIF_MESSAGE = 0x00000001
NIF_ICON = 0x00000002
NIF_TIP = 0x00000004
NIF_STATE = 0x00000008
NIF_INFO = 0x00000010
NIF_GUID = 0x00000020
NIF_REALTIME = 0x00000040
NIF_SHOWTIP = 0x00000080
)
type NOTIFYICONDATA struct {
CbSize DWORD
HWnd HWND
UID UINT
UFlags UINT
UCallbackMessage UINT
HIcon HICON
SzTip [128]uint16 //WCHAR
DwState DWORD
DwStateMask DWORD
SzInfo [256]uint16 //WCHAR
UVersion UINT
SzInfoTitle [64]uint16 //WCHAR
DwInfoFlags DWORD
GuidItem GUID
HBalloonIcon HICON
}
/*
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;;
nid.uID = 111; // ID_TASKBARICON; //发出的消息中的wParam参数
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = 222; // WM_ICONNOTIFY; //点击托盘图标系统发出的消息(即发出的消息中的lParam参数)
nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT1));
lstrcpy(nid.szTip, _T("收银吧"));
*/
//func Shell_NotifyIcon(dwMessage uint32, hWnd HWND, uID UINT, uFlags UINT, uCallbackMessage UINT, hIcon HICON, caption string) (ret bool, err error) {
// var nid NOTIFYICONDATA
// nid.cbSize = DWORD(unsafe.Sizeof(nid))
// nid.hWnd = hWnd
// nid.uID = uID
// nid.uFlags = uFlags
// nid.uCallbackMessage = uCallbackMessage
// nid.hIcon = hIcon
// szTip := syscall.StringToUTF16(caption)
// if len(szTip) > 128 {
// szTip = szTip[0:128]
// }
// copy(nid.szTip[:], szTip)
// return Shell_NotifyIconW(dwMessage, &nid)
//}
func Shell_NotifyIconW(dwMessage uint32, lpData *NOTIFYICONDATA) (ret bool, err error) {
r, e1 := Syscall(procShell_NotifyIconW.Addr(), uintptr(dwMessage), uintptr(unsafe.Pointer(lpData)))
if e1 != nil {
err = e1
}
ret = r != 0
return
}
type DLLVERSIONINFO struct {
CbSize DWORD
DwMajorVersion DWORD
DwMinorVersion DWORD
DwBuildNumber DWORD
DwPlatformID DWORD
}
type DLLVERSIONINFO2 struct {
DLLVERSIONINFO
DwFlags DWORD
UllVersion DWORD64
}
func DllGetVersion(pdvi *DLLVERSIONINFO2) (ret bool, err error) {
pdvi.CbSize = DWORD(unsafe.Sizeof(*pdvi))
r, e1 := Syscall(procDllGetVersion.Addr(), uintptr(unsafe.Pointer(pdvi)))
if e1 != nil {
err = e1
}
ret = r != 0
return
}
func MAKEDLLVERULL(major, minor, build, sp DWORD) DWORD64 {
return (((DWORD64)(major) << 48) |
((DWORD64)(minor) << 32) |
((DWORD64)(build) << 16) |
((DWORD64)(sp) << 0))
}
func PACKVERSION(a, b DWORD) DWORD {
return DWORD(WORD(a&0xffff)) | DWORD(WORD((b&0xffff)<<16))
}