ReactOS 0.4.16-dev-1165-g40721f4
CSysTray Class Reference

#include <csystray.h>

Inheritance diagram for CSysTray:
Collaboration diagram for CSysTray:

Public Member Functions

HRESULT NotifyIcon (INT code, UINT uId, HICON hIcon, LPCWSTR szTip, DWORD dwstate=0)
 
HWND GetHWnd ()
 
VOID EnableService (DWORD dwServiceFlag, BOOL bEnable)
 
BOOL IsServiceEnabled (DWORD dwServiceFlag)
 
void ConfigurePollTimer ()
 
 CSysTray ()
 
virtual ~CSysTray ()
 
virtual HRESULT STDMETHODCALLTYPE QueryStatus (const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
 
virtual HRESULT STDMETHODCALLTYPE Exec (const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
HRESULT QueryStatus ([in, unique] const GUID *pguidCmdGroup, [in] ULONG cCmds, [in, out, size_is(cCmds)] OLECMD prgCmds[], [in, out, unique] OLECMDTEXT *pCmdText)
 
HRESULT Exec ([in, unique] const GUID *pguidCmdGroup, [in] DWORD nCmdID, [in] DWORD nCmdexecopt, [in, unique] VARIANT *pvaIn, [in, out, unique] VARIANT *pvaOut)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Static Public Member Functions

static void RunDll (PCSTR Dll, PCSTR Parameters)
 
static void RunAccessCpl (PCSTR Parameters)
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 

Protected Member Functions

BOOL ProcessWindowMessage (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID=0)
 

Private Member Functions

HRESULT SysTrayMessageLoop ()
 
HRESULT SysTrayThreadProc ()
 
HRESULT CreateSysTrayThread ()
 
HRESULT DestroySysTrayWindow ()
 
HRESULT InitIcons ()
 
HRESULT ShutdownIcons ()
 
HRESULT UpdateIcons ()
 
HRESULT ProcessIconMessage (UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult)
 
HRESULT InitNetShell ()
 
HRESULT ShutdownNetShell ()
 
VOID GetServicesEnabled ()
 

Static Private Member Functions

static DWORD WINAPI s_SysTrayThreadProc (PVOID param)
 

Private Attributes

CComPtr< IOleCommandTargetpctNetShell
 
DWORD dwServicesEnabled
 
UINT wm_SHELLHOOK
 
UINT wm_DESTROYWINDOW
 

Additional Inherited Members

- Public Types inherited from IOleCommandTarget
enum  OLECMDF {
  OLECMDF_SUPPORTED = 0x1 , OLECMDF_ENABLED = 0x2 , OLECMDF_LATCHED = 0x4 , OLECMDF_NINCHED = 0x8 ,
  OLECMDF_INVISIBLE = 0x10 , OLECMDF_DEFHIDEONCTXTMENU = 0x20
}
 
enum  OLECMDTEXTF { OLECMDTEXTF_NONE = 0 , OLECMDTEXTF_NAME = 1 , OLECMDTEXTF_STATUS = 2 }
 
enum  OLECMDEXECOPT { OLECMDEXECOPT_DODEFAULT = 0 , OLECMDEXECOPT_PROMPTUSER = 1 , OLECMDEXECOPT_DONTPROMPTUSER = 2 , OLECMDEXECOPT_SHOWHELP = 3 }
 
enum  OLECMDID {
  OLECMDID_OPEN = 1 , OLECMDID_NEW = 2 , OLECMDID_SAVE = 3 , OLECMDID_SAVEAS = 4 ,
  OLECMDID_SAVECOPYAS = 5 , OLECMDID_PRINT = 6 , OLECMDID_PRINTPREVIEW = 7 , OLECMDID_PAGESETUP = 8 ,
  OLECMDID_SPELL = 9 , OLECMDID_PROPERTIES = 10 , OLECMDID_CUT = 11 , OLECMDID_COPY = 12 ,
  OLECMDID_PASTE = 13 , OLECMDID_PASTESPECIAL = 14 , OLECMDID_UNDO = 15 , OLECMDID_REDO = 16 ,
  OLECMDID_SELECTALL = 17 , OLECMDID_CLEARSELECTION = 18 , OLECMDID_ZOOM = 19 , OLECMDID_GETZOOMRANGE = 20 ,
  OLECMDID_UPDATECOMMANDS = 21 , OLECMDID_REFRESH = 22 , OLECMDID_STOP = 23 , OLECMDID_HIDETOOLBARS = 24 ,
  OLECMDID_SETPROGRESSMAX = 25 , OLECMDID_SETPROGRESSPOS = 26 , OLECMDID_SETPROGRESSTEXT = 27 , OLECMDID_SETTITLE = 28 ,
  OLECMDID_SETDOWNLOADSTATE = 29 , OLECMDID_STOPDOWNLOAD = 30 , OLECMDID_ONTOOLBARACTIVATED = 31 , OLECMDID_FIND = 32 ,
  OLECMDID_DELETE = 33 , OLECMDID_HTTPEQUIV = 34 , OLECMDID_HTTPEQUIV_DONE = 35 , OLECMDID_ENABLE_INTERACTION = 36 ,
  OLECMDID_ONUNLOAD = 37 , OLECMDID_PROPERTYBAG2 = 38 , OLECMDID_PREREFRESH = 39 , OLECMDID_SHOWSCRIPTERROR = 40 ,
  OLECMDID_SHOWMESSAGE = 41 , OLECMDID_SHOWFIND = 42 , OLECMDID_SHOWPAGESETUP = 43 , OLECMDID_SHOWPRINT = 44 ,
  OLECMDID_CLOSE = 45 , OLECMDID_ALLOWUILESSSAVEAS = 46 , OLECMDID_DONTDOWNLOADCSS = 47 , OLECMDID_UPDATEPAGESTATUS = 48 ,
  OLECMDID_PRINT2 = 49 , OLECMDID_PRINTPREVIEW2 = 50 , OLECMDID_SETPRINTTEMPLATE = 51 , OLECMDID_GETPRINTTEMPLATE = 52 ,
  OLECMDID_PAGEACTIONBLOCKED = 55 , OLECMDID_PAGEACTIONUIQUERY = 56 , OLECMDID_FOCUSVIEWCONTROLS = 57 , OLECMDID_FOCUSVIEWCONTROLSQUERY = 58 ,
  OLECMDID_SHOWPAGEACTIONMENU = 59 , OLECMDID_ADDTRAVELENTRY = 60 , OLECMDID_UPDATETRAVELENTRY = 61 , OLECMDID_UPDATEBACKFORWARDSTATE = 62 ,
  OLECMDID_OPTICAL_ZOOM = 63 , OLECMDID_OPTICAL_GETZOOMRANGE = 64 , OLECMDID_WINDOWSTATECHANGED = 65 , OLECMDID_ACTIVEXINSTALLSCOPE = 66 ,
  OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67 , OLECMDID_SHOWTASKDLG = 68 , OLECMDID_POPSTATEEVENT = 69 , OLECMDID_VIEWPORT_MODE = 70 ,
  OLECMDID_LAYOUT_VIEWPORT_WIDTH = 71 , OLECMDID_VISUAL_VIEWPORT_EXCLUDE_BOTTOM = 72 , OLECMDID_USER_OPTICAL_ZOOM = 73 , OLECMDID_PAGEAVAILABLE = 74 ,
  OLECMDID_GETUSERSCALABLE = 75 , OLECMDID_UPDATE_CARET = 76 , OLECMDID_ENABLE_VISIBILITY = 77 , OLECMDID_MEDIA_PLAYBACK = 78
}
 
typedef IOleCommandTargetLPOLECOMMANDTARGET
 
typedef enum IOleCommandTarget::OLECMDF OLECMDF
 
typedef struct IOleCommandTarget::_tagOLECMD OLECMD
 
typedef struct IOleCommandTarget::_tagOLECMDTEXT OLECMDTEXT
 
typedef enum IOleCommandTarget::OLECMDTEXTF OLECMDTEXTF
 
typedef enum IOleCommandTarget::OLECMDEXECOPT OLECMDEXECOPT
 
typedef enum IOleCommandTarget::OLECMDID OLECMDID
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 21 of file csystray.h.

Constructor & Destructor Documentation

◆ CSysTray()

CSysTray::CSysTray ( )

Definition at line 28 of file csystray.cpp.

29{
31}
UINT wm_SHELLHOOK
Definition: csystray.h:32
DWORD dwServicesEnabled
Definition: csystray.h:31
#define L(x)
Definition: ntvdm.h:50
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)

◆ ~CSysTray()

CSysTray::~CSysTray ( )
virtual

Definition at line 33 of file csystray.cpp.

34{
35}

Member Function Documentation

◆ ConfigurePollTimer()

void CSysTray::ConfigurePollTimer ( )

Definition at line 104 of file csystray.cpp.

105{
106 // FIXME: VOLUME_SERVICE_FLAG should use mixerOpen(CALLBACK_WINDOW)
107 // FIXME: POWER_SERVICE_FLAG should use WM_DEVICECHANGE, WM_POWERBROADCAST
108
110 if (this->dwServicesEnabled & fNeedsTimer)
112 else
114}
#define NULL
Definition: types.h:112
#define POLL_TIMER_ID
Definition: precomp.h:91
#define VOLUME_SERVICE_FLAG
Definition: precomp.h:40
#define POWER_SERVICE_FLAG
Definition: precomp.h:38
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)

Referenced by EnableService(), and ProcessWindowMessage().

◆ CreateSysTrayThread()

HRESULT CSysTray::CreateSysTrayThread ( )
private

Definition at line 301 of file csystray.cpp.

302{
303 TRACE("CSysTray Init TODO: Initialize tray icon handlers.\n");
304 AddRef();
305
307
309
310 return S_OK;
311}
static DWORD WINAPI s_SysTrayThreadProc(PVOID param)
Definition: csystray.cpp:260
#define CloseHandle
Definition: compat.h:739
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
HANDLE hThread
Definition: wizard.c:28
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by Exec().

◆ DestroySysTrayWindow()

HRESULT CSysTray::DestroySysTrayWindow ( )
private

Definition at line 313 of file csystray.cpp.

314{
315 if (!DestroyWindow())
316 {
317 // Window is from another thread, ask it politely to destroy itself:
319 }
320 return S_OK;
321}
#define WM_CLOSE
Definition: winuser.h:1632
#define SendMessage
Definition: winuser.h:5863
BOOL WINAPI DestroyWindow(_In_ HWND)

Referenced by Exec().

◆ EnableService()

VOID CSysTray::EnableService ( DWORD  dwServiceFlag,
BOOL  bEnable 
)

Definition at line 66 of file csystray.cpp.

67{
68 HKEY hKey;
69
70 if (bEnable)
71 this->dwServicesEnabled |= dwServiceFlag;
72 else
73 this->dwServicesEnabled &= ~dwServiceFlag;
74
77 0,
78 NULL,
81 NULL,
82 &hKey,
84 {
85 DWORD dwConfig = this->dwServicesEnabled & ~STANDALONESERVICEMASK;
87 L"Services",
88 0,
90 (LPBYTE)&dwConfig,
91 sizeof(dwConfig));
92
94 }
95
97}
#define RegCloseKey(hKey)
Definition: registry.h:49
void ConfigurePollTimer()
Definition: csystray.cpp:104
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
FxAutoRegKey hKey
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
#define REGSTR_PATH_SYSTRAY
Definition: regstr.h:531
#define REG_DWORD
Definition: sdbapi.c:596
unsigned char * LPBYTE
Definition: typedefs.h:53
_In_ BOOL bEnable
Definition: winddi.h:3426
#define HKEY_CURRENT_USER
Definition: winreg.h:11

◆ Exec()

HRESULT STDMETHODCALLTYPE CSysTray::Exec ( const GUID pguidCmdGroup,
DWORD  nCmdID,
DWORD  nCmdexecopt,
VARIANT pvaIn,
VARIANT pvaOut 
)
virtual

Implements IOleCommandTarget.

Definition at line 330 of file csystray.cpp.

331{
332 if (!IsEqualGUID(*pguidCmdGroup, CGID_ShellServiceObject))
333 return E_FAIL;
334
335 switch (nCmdID)
336 {
337 case OLECMDID_NEW: // init
338 return CreateSysTrayThread();
339 case OLECMDID_SAVE: // shutdown
340 return DestroySysTrayWindow();
341 }
342 return S_OK;
343}
HRESULT DestroySysTrayWindow()
Definition: csystray.cpp:313
HRESULT CreateSysTrayThread()
Definition: csystray.cpp:301
#define E_FAIL
Definition: ddrawi.h:102
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147

◆ GetHWnd()

HWND CSysTray::GetHWnd ( )
inline

Definition at line 54 of file csystray.h.

54{ return m_hWnd; }

Referenced by _ShowContextMenu(), _ShowContextMenuR(), NotifyBalloon(), and ShowPowerSchemesPopupMenu().

◆ GetServicesEnabled()

VOID CSysTray::GetServicesEnabled ( )
private

Definition at line 37 of file csystray.cpp.

38{
39 HKEY hKey;
41
42 /* Enable power, volume and hotplug by default */
44
46 0,
47 NULL,
50 NULL,
51 &hKey,
53 {
54 dwSize = sizeof(DWORD);
56 L"Services",
57 NULL,
58 NULL,
60 &dwSize);
61
63 }
64}
#define HOTPLUG_SERVICE_FLAG
Definition: precomp.h:39
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define KEY_READ
Definition: nt_native.h:1023
#define DWORD
Definition: nt_native.h:44

Referenced by ProcessWindowMessage().

◆ InitIcons()

HRESULT CSysTray::InitIcons ( )
private

Definition at line 138 of file csystray.cpp.

139{
140 TRACE("Initializing Notification icons...\n");
141 for (UINT i = 0; i < g_NumIcons; i++)
142 {
143 if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
144 {
146 if (FAILED(hr))
147 return hr;
148 }
149 }
150 for (UINT i = 0; i < _countof(g_StandaloneHandlers); ++i)
151 {
153 }
154
155 return InitNetShell();
156}
HRESULT InitNetShell()
Definition: csystray.cpp:116
SysTrayIconHandlers_t g_IconHandlers[]
Definition: csystray.cpp:17
const int g_NumIcons
Definition: csystray.cpp:22
SysTrayIconHandlers_t g_StandaloneHandlers[]
Definition: csystray.cpp:24
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FAILED(hr)
Definition: intsafe.h:51
unsigned int UINT
Definition: ndis.h:50
HRESULT hr
Definition: shlfolder.c:183
#define _countof(array)
Definition: sndvol32.h:70
PFNSTINIT pfnInit
Definition: precomp.h:56

Referenced by ProcessWindowMessage().

◆ InitNetShell()

HRESULT CSysTray::InitNetShell ( )
private

Definition at line 116 of file csystray.cpp.

117{
118 HRESULT hr = CoCreateInstance(CLSID_ConnectionTray, 0, 1u, IID_PPV_ARG(IOleCommandTarget, &pctNetShell));
119 if (FAILED(hr))
120 return hr;
121
122 return pctNetShell->Exec(&CGID_ShellServiceObject,
125}
CComPtr< IOleCommandTarget > pctNetShell
Definition: csystray.h:27
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define IID_PPV_ARG(Itype, ppType)

Referenced by InitIcons().

◆ IsServiceEnabled()

BOOL CSysTray::IsServiceEnabled ( DWORD  dwServiceFlag)

Definition at line 99 of file csystray.cpp.

100{
101 return (this->dwServicesEnabled & dwServiceFlag);
102}

◆ NotifyIcon()

HRESULT CSysTray::NotifyIcon ( INT  code,
UINT  uId,
HICON  hIcon,
LPCWSTR  szTip,
DWORD  dwstate = 0 
)

Definition at line 237 of file csystray.cpp.

238{
239 NOTIFYICONDATA nim = { 0 };
240
241 TRACE("NotifyIcon code=%d, uId=%d, hIcon=%p, szTip=%S\n", code, uId, hIcon, szTip);
242
243 nim.cbSize = sizeof(nim);
244 nim.uFlags = NIF_MESSAGE | NIF_ICON | NIF_STATE | NIF_TIP;
245 nim.hIcon = hIcon;
246 nim.uID = uId;
247 nim.uCallbackMessage = uId;
248 nim.dwState = dwstate;
249 nim.dwStateMask = NIS_HIDDEN;
250 nim.hWnd = m_hWnd;
251 nim.uVersion = NOTIFYICON_VERSION;
252 if (szTip)
253 StringCchCopy(nim.szTip, _countof(nim.szTip), szTip);
254 else
255 nim.szTip[0] = 0;
256 BOOL ret = Shell_NotifyIcon(code, &nim);
257 return ret ? S_OK : E_FAIL;
258}
unsigned int BOOL
Definition: ntddk_ex.h:94
HICON hIcon
Definition: msconfig.c:44
#define NIF_ICON
Definition: shellapi.h:107
#define NIF_MESSAGE
Definition: shellapi.h:106
#define Shell_NotifyIcon
Definition: shellapi.h:731
#define NIF_TIP
Definition: shellapi.h:108
#define StringCchCopy
Definition: strsafe.h:139
UINT uCallbackMessage
Definition: shellapi.h:232
DWORD dwStateMask
Definition: shellapi.h:240
CHAR szTip[128]
Definition: shellapi.h:238
Definition: inflate.c:139
int ret

◆ ProcessIconMessage()

HRESULT CSysTray::ProcessIconMessage ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
LRESULT lResult 
)
private

Definition at line 194 of file csystray.cpp.

195{
196 for (UINT i = 0; i < g_NumIcons; i++)
197 {
198 HRESULT hr = g_IconHandlers[i].pfnMessage(this, uMsg, wParam, lParam, lResult);
199 if (FAILED(hr))
200 return hr;
201 if (hr == S_OK)
202 return hr;
203 }
204 for (UINT i = 0; i < _countof(g_StandaloneHandlers); ++i)
205 {
206 HRESULT hr = g_StandaloneHandlers[i].pfnMessage(this, uMsg, wParam, lParam, lResult);
207 if (FAILED(hr))
208 return hr;
209 if (hr == S_OK)
210 return hr;
211 }
212
213 // Not handled by anyone, so return accordingly.
214 return S_FALSE;
215}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
PFNSTMESSAGE pfnMessage
Definition: precomp.h:59
#define S_FALSE
Definition: winerror.h:2357

Referenced by ProcessWindowMessage().

◆ ProcessWindowMessage()

BOOL CSysTray::ProcessWindowMessage ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
LRESULT lResult,
DWORD  dwMsgMapID = 0 
)
protected

Definition at line 345 of file csystray.cpp.

346{
347 HRESULT hr;
348
349 if (hWnd != m_hWnd)
350 return FALSE;
351
352 if (uMsg == wm_SHELLHOOK && wm_SHELLHOOK)
353 {
354 if (wParam == HSHELL_ACCESSIBILITYSTATE && lParam == ACCESS_STICKYKEYS)
355 {
356 StickyKeys_Update(this);
357 }
358 else if (wParam == HSHELL_ACCESSIBILITYSTATE && lParam == ACCESS_MOUSEKEYS)
359 {
360 MouseKeys_Update(this);
361 }
362 lResult = 0L;
363 return TRUE;
364 }
365
366 switch (uMsg)
367 {
368 case WM_NCCREATE:
369 case WM_NCDESTROY:
370 return FALSE;
371
372 case WM_CLOSE:
373 return DestroyWindow();
374
375 case WM_CREATE:
377 InitIcons();
380 return TRUE;
381
382 case WM_TIMER:
383 if (wParam == POLL_TIMER_ID)
384 UpdateIcons();
385 else
386 ProcessIconMessage(uMsg, wParam, lParam, lResult);
387 return TRUE;
388
389 case WM_SETTINGCHANGE:
391 StickyKeys_Update(this);
393 MouseKeys_Update(this);
394 break;
395
396 case WM_DESTROY:
401 return TRUE;
402 }
403
404 TRACE("SysTray message received %u (%08p %08p)\n", uMsg, wParam, lParam);
405
406 hr = ProcessIconMessage(uMsg, wParam, lParam, lResult);
407 if (FAILED(hr))
408 return FALSE;
409
410 return (hr == S_OK);
411}
HWND hWnd
Definition: settings.c:17
VOID GetServicesEnabled()
Definition: csystray.cpp:37
HRESULT ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult)
Definition: csystray.cpp:194
HRESULT ShutdownIcons()
Definition: csystray.cpp:158
HRESULT UpdateIcons()
Definition: csystray.cpp:178
HRESULT InitIcons()
Definition: csystray.cpp:138
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HRESULT STDMETHODCALLTYPE MouseKeys_Update(_In_ CSysTray *pSysTray)
Definition: mouse.cpp:43
#define StickyKeys_Update(thisptr)
Definition: precomp.h:87
BOOL WINAPI DeregisterShellHookWindow(_In_ HWND)
#define SPI_SETSTICKYKEYS
Definition: winuser.h:1419
#define SPI_SETMOUSEKEYS
Definition: winuser.h:1415
#define WM_CREATE
Definition: winuser.h:1619
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
BOOL WINAPI RegisterShellHookWindow(_In_ HWND)
#define WM_NCCREATE
Definition: winuser.h:1694
#define WM_SETTINGCHANGE
Definition: winuser.h:1640
#define WM_TIMER
Definition: winuser.h:1753
#define WM_NCDESTROY
Definition: winuser.h:1695
#define WM_DESTROY
Definition: winuser.h:1620

◆ QueryStatus()

HRESULT STDMETHODCALLTYPE CSysTray::QueryStatus ( const GUID pguidCmdGroup,
ULONG  cCmds,
OLECMD  prgCmds[],
OLECMDTEXT pCmdText 
)
virtual

Implements IOleCommandTarget.

Definition at line 324 of file csystray.cpp.

325{
327 return S_OK;
328}
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15

◆ RunAccessCpl()

void CSysTray::RunAccessCpl ( PCSTR  Parameters)
static

Definition at line 423 of file csystray.cpp.

424{
425 RunDll("access.cpl", Parameters);
426}
static void RunDll(PCSTR Dll, PCSTR Parameters)
Definition: csystray.cpp:413
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
Definition: wdfio.h:869

◆ RunDll()

void CSysTray::RunDll ( PCSTR  Dll,
PCSTR  Parameters 
)
static

Definition at line 413 of file csystray.cpp.

414{
415 WCHAR buf[400], rundll[MAX_PATH];
416 GetSystemDirectory(rundll, _countof(rundll));
417 PathAppendW(rundll, L"rundll32.exe");
418
419 wsprintfW(buf, L"%hs %hs%hs", "shell32.dll,Control_RunDLL", Dll, Parameters);
420 ShellExecuteW(NULL, NULL, rundll, buf, NULL, SW_SHOW);
421}
#define MAX_PATH
Definition: compat.h:34
static const WCHAR Dll[]
Definition: register.c:83
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define PathAppendW
Definition: pathcch.h:309
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2529
#define GetSystemDirectory
Definition: winbase.h:3874
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define SW_SHOW
Definition: winuser.h:786
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by _RunHotplug(), _RunMMCpl(), _RunPower(), and RunAccessCpl().

◆ s_SysTrayThreadProc()

DWORD WINAPI CSysTray::s_SysTrayThreadProc ( PVOID  param)
staticprivate

Definition at line 260 of file csystray.cpp.

261{
262 CSysTray * st = (CSysTray*) param;
263 return st->SysTrayThreadProc();
264}
HRESULT SysTrayThreadProc()
Definition: csystray.cpp:283
GLfloat param
Definition: glext.h:5796

Referenced by CreateSysTrayThread().

◆ ShutdownIcons()

HRESULT CSysTray::ShutdownIcons ( )
private

Definition at line 158 of file csystray.cpp.

159{
160 TRACE("Shutting down Notification icons...\n");
161 for (UINT i = 0; i < g_NumIcons; i++)
162 {
163 if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
164 {
165 this->dwServicesEnabled &= ~g_IconHandlers[i].dwServiceFlag;
168 }
169 }
170 for (UINT i = 0; i < _countof(g_StandaloneHandlers); ++i)
171 {
173 }
174
175 return ShutdownNetShell();
176}
HRESULT ShutdownNetShell()
Definition: csystray.cpp:127
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:65
PFNSTSHUTDOWN pfnShutdown
Definition: precomp.h:57

Referenced by ProcessWindowMessage().

◆ ShutdownNetShell()

HRESULT CSysTray::ShutdownNetShell ( )
private

Definition at line 127 of file csystray.cpp.

128{
129 if (!pctNetShell)
130 return S_FALSE;
131 HRESULT hr = pctNetShell->Exec(&CGID_ShellServiceObject,
134 pctNetShell.Release();
135 return hr;
136}

Referenced by ShutdownIcons().

◆ SysTrayMessageLoop()

HRESULT CSysTray::SysTrayMessageLoop ( )
private

Definition at line 266 of file csystray.cpp.

267{
268 BOOL ret;
269 MSG msg;
270
271 while ((ret = GetMessage(&msg, NULL, 0, 0)) != 0)
272 {
273 if (ret < 0)
274 break;
275
278 }
279
280 return S_OK;
281}
#define msg(x)
Definition: auth_time.c:54
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define GetMessage
Definition: winuser.h:5810
#define DispatchMessage
Definition: winuser.h:5785

Referenced by SysTrayThreadProc().

◆ SysTrayThreadProc()

HRESULT CSysTray::SysTrayThreadProc ( )
private

Definition at line 283 of file csystray.cpp.

284{
285 WCHAR strFileName[MAX_PATH];
287 HMODULE hLib = LoadLibraryW(strFileName);
288
290
291 Create(NULL);
292
294
296
297 Release();
299}
HINSTANCE g_hInstance
Definition: MainWindow.cpp:18
@ Create
Definition: registry.c:563
HRESULT SysTrayMessageLoop()
Definition: csystray.cpp:266
#define LoadLibraryW(x)
Definition: compat.h:747
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
VOID WINAPI FreeLibraryAndExitThread(HMODULE hLibModule, DWORD dwExitCode)
Definition: loader.c:507
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
ULONG Release()
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:278
@ COINIT_DISABLE_OLE1DDE
Definition: objbase.h:280

Referenced by s_SysTrayThreadProc().

◆ UpdateIcons()

HRESULT CSysTray::UpdateIcons ( )
private

Definition at line 178 of file csystray.cpp.

179{
180 TRACE("Updating Notification icons...\n");
181 for (int i = 0; i < g_NumIcons; i++)
182 {
183 if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
184 {
186 if (FAILED(hr))
187 return hr;
188 }
189 }
190
191 return S_OK;
192}
PFNSTUPDATE pfnUpdate
Definition: precomp.h:58

Referenced by ProcessWindowMessage().

Member Data Documentation

◆ dwServicesEnabled

DWORD CSysTray::dwServicesEnabled
private

◆ pctNetShell

CComPtr<IOleCommandTarget> CSysTray::pctNetShell
private

Definition at line 27 of file csystray.h.

Referenced by InitNetShell(), and ShutdownNetShell().

◆ wm_DESTROYWINDOW

UINT CSysTray::wm_DESTROYWINDOW
private

Definition at line 33 of file csystray.h.

◆ wm_SHELLHOOK

UINT CSysTray::wm_SHELLHOOK
private

Definition at line 32 of file csystray.h.

Referenced by CSysTray(), and ProcessWindowMessage().


The documentation for this class was generated from the following files: