ReactOS 0.4.17-dev-966-gf06eace
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_ENTRY * GetCategoryMap ()
 
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< IOleCommandTarget > pctNetShell
 
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 IOleCommandTarget * LPOLECOMMANDTARGET
 
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 IUnknown * LPUNKNOWN
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 20 of file csystray.h.

Constructor & Destructor Documentation

◆ CSysTray()

CSysTray::CSysTray ( )

Definition at line 29 of file csystray.cpp.

30{
32}
UINT wm_SHELLHOOK
Definition: csystray.h:31
DWORD dwServicesEnabled
Definition: csystray.h:30
#define L(x)
Definition: resources.c:13
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)

◆ ~CSysTray()

CSysTray::~CSysTray ( )
virtual

Definition at line 34 of file csystray.cpp.

35{
36}

Member Function Documentation

◆ ConfigurePollTimer()

void CSysTray::ConfigurePollTimer ( )

Definition at line 105 of file csystray.cpp.

106{
107 // FIXME: VOLUME_SERVICE_FLAG uses mixerOpen(CALLBACK_WINDOW) but the timer
108 // still has to be here because CORE-20778
109 // FIXME: POWER_SERVICE_FLAG should use WM_DEVICECHANGE, WM_POWERBROADCAST
110
111 DWORD fNeedsTimer = POWER_SERVICE_FLAG;
112 if (this->dwServicesEnabled & fNeedsTimer)
114 else
116}
#define NULL
Definition: types.h:112
#define POLL_TIMER_ID
Definition: precomp.h:91
#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 303 of file csystray.cpp.

304{
305 TRACE("CSysTray Init TODO: Initialize tray icon handlers.\n");
306 AddRef();
307
309
311
312 return S_OK;
313}
static DWORD WINAPI s_SysTrayThreadProc(PVOID param)
Definition: csystray.cpp:262
#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 315 of file csystray.cpp.

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

Referenced by Exec().

◆ EnableService()

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

Definition at line 67 of file csystray.cpp.

68{
69 HKEY hKey;
70
71 if (bEnable)
72 this->dwServicesEnabled |= dwServiceFlag;
73 else
74 this->dwServicesEnabled &= ~dwServiceFlag;
75
78 0,
79 NULL,
82 NULL,
83 &hKey,
85 {
86 DWORD dwConfig = this->dwServicesEnabled & ~STANDALONESERVICEMASK;
88 L"Services",
89 0,
91 (LPBYTE)&dwConfig,
92 sizeof(dwConfig));
93
95 }
96
98}
#define RegCloseKey(hKey)
Definition: registry.h:49
void ConfigurePollTimer()
Definition: csystray.cpp:105
#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:1060
#define KEY_WRITE
Definition: nt_native.h:1034
#define REGSTR_PATH_SYSTRAY
Definition: regstr.h:531
#define REG_DWORD
Definition: sdbapi.c:615
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 332 of file csystray.cpp.

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

◆ GetHWnd()

HWND CSysTray::GetHWnd ( )
inline

Definition at line 53 of file csystray.h.

53{ return m_hWnd; }

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

◆ GetServicesEnabled()

VOID CSysTray::GetServicesEnabled ( )
private

Definition at line 38 of file csystray.cpp.

39{
40 HKEY hKey;
42
43 /* Enable power, volume and hotplug by default */
45
47 0,
48 NULL,
51 NULL,
52 &hKey,
54 {
55 dwSize = sizeof(DWORD);
57 L"Services",
58 NULL,
59 NULL,
61 &dwSize);
62
64 }
65}
#define HOTPLUG_SERVICE_FLAG
Definition: precomp.h:39
#define VOLUME_SERVICE_FLAG
Definition: precomp.h:40
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:1026
#define DWORD
Definition: nt_native.h:44

Referenced by ProcessWindowMessage().

◆ InitIcons()

HRESULT CSysTray::InitIcons ( )
private

Definition at line 140 of file csystray.cpp.

141{
142 TRACE("Initializing Notification icons...\n");
143 for (UINT i = 0; i < g_NumIcons; i++)
144 {
145 if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
146 {
148 if (FAILED(hr))
149 return hr;
150 }
151 }
152 for (UINT i = 0; i < _countof(g_StandaloneHandlers); ++i)
153 {
155 }
156
157 return InitNetShell();
158}
HRESULT InitNetShell()
Definition: csystray.cpp:118
SysTrayIconHandlers_t g_IconHandlers[]
Definition: csystray.cpp:18
const int g_NumIcons
Definition: csystray.cpp:23
SysTrayIconHandlers_t g_StandaloneHandlers[]
Definition: csystray.cpp:25
HRESULT hr
Definition: delayimp.cpp:582
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
unsigned int UINT
Definition: sysinfo.c:13
#define FAILED(hr)
Definition: intsafe.h:51
#define _countof(array)
Definition: sndvol32.h:70
PFNSTINIT pfnInit
Definition: precomp.h:56

Referenced by ProcessWindowMessage().

◆ InitNetShell()

HRESULT CSysTray::InitNetShell ( )
private

Definition at line 118 of file csystray.cpp.

119{
120 HRESULT hr = CoCreateInstance(CLSID_ConnectionTray, 0, 1u, IID_PPV_ARG(IOleCommandTarget, &pctNetShell));
121 if (FAILED(hr))
122 return hr;
123
124 return pctNetShell->Exec(&CGID_ShellServiceObject,
127}
#define IID_PPV_ARG(Itype, ppType)
CComPtr< IOleCommandTarget > pctNetShell
Definition: csystray.h:26
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685

Referenced by InitIcons().

◆ IsServiceEnabled()

BOOL CSysTray::IsServiceEnabled ( DWORD  dwServiceFlag)

Definition at line 100 of file csystray.cpp.

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

◆ NotifyIcon()

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

Definition at line 239 of file csystray.cpp.

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

◆ ProcessIconMessage()

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

Definition at line 196 of file csystray.cpp.

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

Referenced by ProcessWindowMessage().

◆ ProcessWindowMessage()

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

Definition at line 347 of file csystray.cpp.

348{
349 HRESULT hr;
350
351 if (hWnd != m_hWnd)
352 return FALSE;
353
354 if (uMsg == wm_SHELLHOOK && wm_SHELLHOOK)
355 {
356 if (wParam == HSHELL_ACCESSIBILITYSTATE && lParam == ACCESS_STICKYKEYS)
357 {
358 StickyKeys_Update(this);
359 }
360 else if (wParam == HSHELL_ACCESSIBILITYSTATE && lParam == ACCESS_MOUSEKEYS)
361 {
362 MouseKeys_Update(this);
363 }
364 lResult = 0L;
365 return TRUE;
366 }
367
368 switch (uMsg)
369 {
370 case WM_NCCREATE:
371 case WM_NCDESTROY:
373 return FALSE;
374
375 case WM_CLOSE:
376 return DestroyWindow();
377
378 case WM_CREATE:
380 InitIcons();
383 return TRUE;
384
385 case WM_TIMER:
386 if (wParam == POLL_TIMER_ID)
387 UpdateIcons();
388 else
389 ProcessIconMessage(uMsg, wParam, lParam, lResult);
390 return TRUE;
391
392 case WM_SETTINGCHANGE:
394 StickyKeys_Update(this);
396 MouseKeys_Update(this);
397 break;
398
400 ProcessIconMessage(uMsg, wParam, lParam, lResult);
401 return TRUE;
402
403 case WM_DESTROY:
408 return TRUE;
409 }
410
411 TRACE("SysTray message received %u (%08p %08p)\n", uMsg, wParam, lParam);
412
413 hr = ProcessIconMessage(uMsg, wParam, lParam, lResult);
414 if (FAILED(hr))
415 return FALSE;
416
417 return (hr == S_OK);
418}
HWND hWnd
Definition: settings.c:17
VOID GetServicesEnabled()
Definition: csystray.cpp:38
HRESULT ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult)
Definition: csystray.cpp:196
HRESULT ShutdownIcons()
Definition: csystray.cpp:160
HRESULT UpdateIcons()
Definition: csystray.cpp:180
HRESULT InitIcons()
Definition: csystray.cpp:140
#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
#define MM_MIXM_CONTROL_CHANGE
Definition: mmsystem.h:83
#define MM_MIXM_LINE_CHANGE
Definition: mmsystem.h:82
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:1636
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
BOOL WINAPI RegisterShellHookWindow(_In_ HWND)
#define WM_NCCREATE
Definition: winuser.h:1711
#define WM_SETTINGCHANGE
Definition: winuser.h:1657
#define WM_TIMER
Definition: winuser.h:1770
#define WM_NCDESTROY
Definition: winuser.h:1712
#define WM_DESTROY
Definition: winuser.h:1637

◆ QueryStatus()

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

Implements IOleCommandTarget.

Definition at line 326 of file csystray.cpp.

327{
329 return S_OK;
330}
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15

◆ RunAccessCpl()

void CSysTray::RunAccessCpl ( PCSTR  Parameters)
static

Definition at line 430 of file csystray.cpp.

431{
432 RunDll("access.cpl", Parameters);
433}
static void RunDll(PCSTR Dll, PCSTR Parameters)
Definition: csystray.cpp:420
_In_ HANDLE _In_ CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters
Definition: dispmprt.h:321

◆ RunDll()

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

Definition at line 420 of file csystray.cpp.

421{
422 WCHAR buf[400], rundll[MAX_PATH];
423 GetSystemDirectory(rundll, _countof(rundll));
424 PathAppendW(rundll, L"rundll32.exe");
425
426 wsprintfW(buf, L"%hs %hs%hs", "shell32.dll,Control_RunDLL", Dll, Parameters);
427 ShellExecuteW(NULL, NULL, rundll, buf, NULL, SW_SHOW);
428}
#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:310
short WCHAR
Definition: pedump.c:58
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define SW_SHOW
Definition: winuser.h:786
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2787
#define GetSystemDirectory
Definition: winbase.h:3565

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

◆ s_SysTrayThreadProc()

DWORD WINAPI CSysTray::s_SysTrayThreadProc ( PVOID  param)
staticprivate

Definition at line 262 of file csystray.cpp.

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

Referenced by CreateSysTrayThread().

◆ ShutdownIcons()

HRESULT CSysTray::ShutdownIcons ( )
private

Definition at line 160 of file csystray.cpp.

161{
162 TRACE("Shutting down Notification icons...\n");
163 for (UINT i = 0; i < g_NumIcons; i++)
164 {
165 if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
166 {
167 this->dwServicesEnabled &= ~g_IconHandlers[i].dwServiceFlag;
170 }
171 }
172 for (UINT i = 0; i < _countof(g_StandaloneHandlers); ++i)
173 {
175 }
176
177 return ShutdownNetShell();
178}
HRESULT ShutdownNetShell()
Definition: csystray.cpp:129
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
PFNSTSHUTDOWN pfnShutdown
Definition: precomp.h:57

Referenced by ProcessWindowMessage().

◆ ShutdownNetShell()

HRESULT CSysTray::ShutdownNetShell ( )
private

Definition at line 129 of file csystray.cpp.

130{
131 if (!pctNetShell)
132 return S_FALSE;
133 HRESULT hr = pctNetShell->Exec(&CGID_ShellServiceObject,
136 pctNetShell.Release();
137 return hr;
138}

Referenced by ShutdownIcons().

◆ SysTrayMessageLoop()

HRESULT CSysTray::SysTrayMessageLoop ( )
private

Definition at line 268 of file csystray.cpp.

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

Referenced by SysTrayThreadProc().

◆ SysTrayThreadProc()

HRESULT CSysTray::SysTrayThreadProc ( )
private

Definition at line 285 of file csystray.cpp.

286{
287 WCHAR strFileName[MAX_PATH];
289 HMODULE hLib = LoadLibraryW(strFileName);
290
292
293 Create(NULL);
294
296
298
299 Release();
301}
HINSTANCE g_hInstance
Definition: MainWindow.cpp:18
@ Create
Definition: registry.c:563
HRESULT SysTrayMessageLoop()
Definition: csystray.cpp:268
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
Definition: combase.c:2803
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
#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
ULONG Release()
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:279
@ COINIT_DISABLE_OLE1DDE
Definition: objbase.h:281

Referenced by s_SysTrayThreadProc().

◆ UpdateIcons()

HRESULT CSysTray::UpdateIcons ( )
private

Definition at line 180 of file csystray.cpp.

181{
182 TRACE("Updating Notification icons...\n");
183 for (int i = 0; i < g_NumIcons; i++)
184 {
185 if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
186 {
188 if (FAILED(hr))
189 return hr;
190 }
191 }
192
193 return S_OK;
194}
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 26 of file csystray.h.

Referenced by InitNetShell(), and ShutdownNetShell().

◆ wm_DESTROYWINDOW

UINT CSysTray::wm_DESTROYWINDOW
private

Definition at line 32 of file csystray.h.

◆ wm_SHELLHOOK

UINT CSysTray::wm_SHELLHOOK
private

Definition at line 31 of file csystray.h.

Referenced by CSysTray(), and ProcessWindowMessage().


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