|
1
|
1 #include "shared.h"
|
|
|
2 #include <shellapi.h>
|
|
|
3
|
|
|
4 void SHARED_EXPORT uFixAmpersandChars(const char * src,pfc::string_base & out)
|
|
|
5 {
|
|
|
6 out.reset();
|
|
|
7 while(*src)
|
|
|
8 {
|
|
|
9 if (*src=='&')
|
|
|
10 {
|
|
|
11 out.add_string("&&&");
|
|
|
12 src++;
|
|
|
13 while(*src=='&')
|
|
|
14 {
|
|
|
15 out.add_string("&&");
|
|
|
16 src++;
|
|
|
17 }
|
|
|
18 }
|
|
|
19 else out.add_byte(*(src++));
|
|
|
20 }
|
|
|
21 }
|
|
|
22
|
|
|
23 void SHARED_EXPORT uFixAmpersandChars_v2(const char * src,pfc::string_base & out)
|
|
|
24 {
|
|
|
25 out.reset();
|
|
|
26 while(*src)
|
|
|
27 {
|
|
|
28 if (*src=='&')
|
|
|
29 {
|
|
|
30 out.add_string("&&");
|
|
|
31 src++;
|
|
|
32 }
|
|
|
33 else out.add_byte(*(src++));
|
|
|
34 }
|
|
|
35 }
|
|
|
36
|
|
|
37 static BOOL run_action(DWORD action,NOTIFYICONDATA * data)
|
|
|
38 {
|
|
|
39 if (Shell_NotifyIcon(action,data)) return TRUE;
|
|
|
40 if (action==NIM_MODIFY)
|
|
|
41 {
|
|
|
42 if (Shell_NotifyIcon(NIM_ADD,data)) return TRUE;
|
|
|
43 }
|
|
|
44 return FALSE;
|
|
|
45 }
|
|
|
46
|
|
|
47 extern "C"
|
|
|
48 {
|
|
|
49
|
|
|
50 BOOL SHARED_EXPORT uShellNotifyIcon(DWORD action,HWND wnd,UINT id,UINT callbackmsg,HICON icon,const char * tip)
|
|
|
51 {
|
|
|
52 NOTIFYICONDATA nid = {};
|
|
|
53 nid.cbSize = sizeof(nid);
|
|
|
54 nid.hWnd = wnd;
|
|
|
55 nid.uID = id;
|
|
|
56 nid.uFlags = 0;
|
|
|
57 if (callbackmsg)
|
|
|
58 {
|
|
|
59 nid.uFlags |= NIF_MESSAGE;
|
|
|
60 nid.uCallbackMessage = callbackmsg;
|
|
|
61 }
|
|
|
62 if (icon)
|
|
|
63 {
|
|
|
64 nid.uFlags |= NIF_ICON;
|
|
|
65 nid.hIcon = icon;
|
|
|
66 }
|
|
|
67 if (tip)
|
|
|
68 {
|
|
|
69 nid.uFlags |= NIF_TIP;
|
|
|
70 pfc::stringToBuffer(nid.szTip,pfc::stringcvt::string_os_from_utf8(tip));
|
|
|
71 }
|
|
|
72
|
|
|
73 return run_action(action,&nid);
|
|
|
74 }
|
|
|
75
|
|
|
76 BOOL SHARED_EXPORT uShellNotifyIconEx(DWORD action,HWND wnd,UINT id,UINT callbackmsg,HICON icon,const char * tip,const char * balloon_title,const char * balloon_msg)
|
|
|
77 {
|
|
|
78 NOTIFYICONDATA nid = {};
|
|
|
79 nid.cbSize = sizeof(nid);
|
|
|
80 nid.hWnd = wnd;
|
|
|
81 nid.uID = id;
|
|
|
82 if (callbackmsg)
|
|
|
83 {
|
|
|
84 nid.uFlags |= NIF_MESSAGE;
|
|
|
85 nid.uCallbackMessage = callbackmsg;
|
|
|
86 }
|
|
|
87 if (icon)
|
|
|
88 {
|
|
|
89 nid.uFlags |= NIF_ICON;
|
|
|
90 nid.hIcon = icon;
|
|
|
91 }
|
|
|
92 if (tip)
|
|
|
93 {
|
|
|
94 nid.uFlags |= NIF_TIP;
|
|
|
95 pfc::stringToBuffer(nid.szTip,pfc::stringcvt::string_os_from_utf8(tip));
|
|
|
96 }
|
|
|
97
|
|
|
98 nid.dwInfoFlags = NIIF_INFO | NIIF_NOSOUND;
|
|
|
99 //if (balloon_title || balloon_msg)
|
|
|
100 {
|
|
|
101 nid.uFlags |= NIF_INFO;
|
|
|
102 if (balloon_title) pfc::stringToBuffer(nid.szInfoTitle,pfc::stringcvt::string_os_from_utf8(balloon_title));
|
|
|
103 if (balloon_msg) pfc::stringToBuffer(nid.szInfo,pfc::stringcvt::string_os_from_utf8(balloon_msg));
|
|
|
104 }
|
|
|
105 return run_action(action,&nid);
|
|
|
106 }
|
|
|
107
|
|
|
108 }//extern "C"
|