2 * Copyright 2004 Martin Fuchs
4 * Pass on icon notification messages to the systray implementation
5 * in the currently running shell.
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 /* copy data structure for tray notifications */
25 typedef struct TrayNotifyCDS_Dummy
{
28 DWORD nicon_data
[1]; // placeholder for NOTIFYICONDATA structure
29 } TrayNotifyCDS_Dummy
;
31 /* The only difference between Shell_NotifyIconA and Shell_NotifyIconW is the call to SendMessageA/W. */
32 static BOOL
SHELL_NotifyIcon(DWORD dwMessage
, void* pnid
, HWND nid_hwnd
, int nid_size
, BOOL unicode
)
38 int len
= sizeof(TrayNotifyCDS_Dummy
) - sizeof(DWORD
) + nid_size
;
40 TrayNotifyCDS_Dummy
* pnotify_data
= (TrayNotifyCDS_Dummy
*) alloca(len
);
42 pnotify_data
->cookie
= 1;
43 pnotify_data
->notify_code
= dwMessage
;
44 memcpy(&pnotify_data
->nicon_data
, pnid
, nid_size
);
48 data
.lpData
= pnotify_data
;
50 for(hwnd
= 0; (hwnd
= FindWindowExW(0, hwnd
, L
"Shell_TrayWnd", NULL
)); )
51 if ((unicode
? SendMessageW
: SendMessageA
)(hwnd
, WM_COPYDATA
, (WPARAM
)nid_hwnd
, (LPARAM
)&data
))
58 /*************************************************************************
59 * Shell_NotifyIcon [SHELL32.296]
60 * Shell_NotifyIconA [SHELL32.297]
62 BOOL WINAPI
Shell_NotifyIconA(DWORD dwMessage
, PNOTIFYICONDATAA pnid
)
64 return SHELL_NotifyIcon(dwMessage
, pnid
, pnid
->hWnd
, pnid
->cbSize
, FALSE
);
67 /*************************************************************************
68 * Shell_NotifyIconW [SHELL32.298]
70 BOOL WINAPI
Shell_NotifyIconW(DWORD dwMessage
, PNOTIFYICONDATAW pnid
)
72 return SHELL_NotifyIcon(dwMessage
, pnid
, pnid
->hWnd
, pnid
->cbSize
, TRUE
);