ReactOS  0.4.15-dev-5463-g138eb58
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)
 
 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 ()
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

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
 
- 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)
 
- 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 23 of file csystray.cpp.

24 {
26  wm_DESTROYWINDOW = RegisterWindowMessageW(L"CSysTray_DESTROY");
27 }
UINT wm_SHELLHOOK
Definition: csystray.h:32
#define L(x)
Definition: ntvdm.h:50
DWORD dwServicesEnabled
Definition: csystray.h:31
UINT wm_DESTROYWINDOW
Definition: csystray.h:33
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)

◆ ~CSysTray()

CSysTray::~CSysTray ( )
virtual

Definition at line 29 of file csystray.cpp.

30 {
31 }

Member Function Documentation

◆ CreateSysTrayThread()

HRESULT CSysTray::CreateSysTrayThread ( )
private

Definition at line 271 of file csystray.cpp.

272 {
273  TRACE("CSysTray Init TODO: Initialize tray icon handlers.\n");
274  AddRef();
275 
277 
279 
280  return S_OK;
281 }
static DWORD WINAPI s_SysTrayThreadProc(PVOID param)
Definition: csystray.cpp:230
#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
#define TRACE(s)
Definition: solgame.cpp:4
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
#define NULL
Definition: types.h:112
HANDLE hThread
Definition: wizard.c:28

Referenced by Exec().

◆ DestroySysTrayWindow()

HRESULT CSysTray::DestroySysTrayWindow ( )
private

Definition at line 283 of file csystray.cpp.

284 {
285  if (!DestroyWindow())
286  {
287  // Window is from another thread, ask it politely to destroy itself:
289  }
290  return S_OK;
291 }
BOOL WINAPI DestroyWindow(_In_ HWND)
UINT wm_DESTROYWINDOW
Definition: csystray.h:33
#define S_OK
Definition: intsafe.h:52
#define SendMessage
Definition: winuser.h:5833

Referenced by Exec().

◆ EnableService()

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

Definition at line 62 of file csystray.cpp.

63 {
64  HKEY hKey;
65 
66  if (bEnable)
67  this->dwServicesEnabled |= dwServiceFlag;
68  else
69  this->dwServicesEnabled &= ~dwServiceFlag;
70 
72  L"Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\SysTray",
73  0,
74  NULL,
76  KEY_WRITE,
77  NULL,
78  &hKey,
79  NULL) == ERROR_SUCCESS)
80  {
82  L"Services",
83  0,
84  REG_DWORD,
85  (LPBYTE)&this->dwServicesEnabled,
86  sizeof(DWORD));
87 
89  }
90 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define HKEY_CURRENT_USER
Definition: winreg.h:11
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:1091
#define L(x)
Definition: ntvdm.h:50
unsigned char * LPBYTE
Definition: typedefs.h:53
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
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:4899
DWORD dwServicesEnabled
Definition: csystray.h:31
unsigned long DWORD
Definition: ntddk_ex.h:95
_In_ BOOL bEnable
Definition: winddi.h:3426
FxAutoRegKey hKey
#define NULL
Definition: types.h:112
#define REG_DWORD
Definition: sdbapi.c:596
#define RegCloseKey(hKey)
Definition: registry.h:47

◆ Exec()

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

Implements IOleCommandTarget.

Definition at line 300 of file csystray.cpp.

301 {
302  if (!IsEqualGUID(*pguidCmdGroup, CGID_ShellServiceObject))
303  return E_FAIL;
304 
305  switch (nCmdID)
306  {
307  case OLECMDID_NEW: // init
308  return CreateSysTrayThread();
309  case OLECMDID_SAVE: // shutdown
310  return DestroySysTrayWindow();
311  }
312  return S_OK;
313 }
HRESULT CreateSysTrayThread()
Definition: csystray.cpp:271
#define E_FAIL
Definition: ddrawi.h:102
HRESULT DestroySysTrayWindow()
Definition: csystray.cpp:283
#define S_OK
Definition: intsafe.h:52
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112

◆ GetHWnd()

HWND CSysTray::GetHWnd ( )
inline

Definition at line 54 of file csystray.h.

54 { return m_hWnd; }

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

◆ GetServicesEnabled()

VOID CSysTray::GetServicesEnabled ( )
private

Definition at line 33 of file csystray.cpp.

34 {
35  HKEY hKey;
36  DWORD dwSize;
37 
38  /* Enable power, volume and hotplug by default */
40 
42  0,
43  NULL,
45  KEY_READ,
46  NULL,
47  &hKey,
48  NULL) == ERROR_SUCCESS)
49  {
50  dwSize = sizeof(DWORD);
52  L"Services",
53  NULL,
54  NULL,
55  (LPBYTE)&this->dwServicesEnabled,
56  &dwSize);
57 
59  }
60 }
#define POWER_SERVICE_FLAG
Definition: precomp.h:38
#define HOTPLUG_SERVICE_FLAG
Definition: precomp.h:39
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define DWORD
Definition: nt_native.h:44
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:1091
#define L(x)
Definition: ntvdm.h:50
unsigned char * LPBYTE
Definition: typedefs.h:53
#define REGSTR_PATH_SYSTRAY
Definition: regstr.h:531
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
DWORD dwServicesEnabled
Definition: csystray.h:31
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4120
#define VOLUME_SERVICE_FLAG
Definition: precomp.h:40
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
#define NULL
Definition: types.h:112
#define RegCloseKey(hKey)
Definition: registry.h:47
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

Referenced by ProcessWindowMessage().

◆ InitIcons()

HRESULT CSysTray::InitIcons ( )
private

Definition at line 119 of file csystray.cpp.

120 {
121  TRACE("Initializing Notification icons...\n");
122  for (int i = 0; i < g_NumIcons; i++)
123  {
124  if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
125  {
126  HRESULT hr = g_IconHandlers[i].pfnInit(this);
127  if (FAILED(hr))
128  return hr;
129  }
130  }
131 
132  MouseKeys_Init(this);
133 
134  return InitNetShell();
135 }
HRESULT hr
Definition: shlfolder.c:183
HRESULT InitNetShell()
Definition: csystray.cpp:97
const int g_NumIcons
Definition: csystray.cpp:21
SysTrayIconHandlers_t g_IconHandlers[]
Definition: csystray.cpp:16
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwServicesEnabled
Definition: csystray.h:31
LONG HRESULT
Definition: typedefs.h:79
HRESULT STDMETHODCALLTYPE MouseKeys_Init(_In_ CSysTray *pSysTray)
Definition: mouse.cpp:15
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
PFNSTINIT pfnInit
Definition: precomp.h:52

Referenced by ProcessWindowMessage().

◆ InitNetShell()

HRESULT CSysTray::InitNetShell ( )
private

Definition at line 97 of file csystray.cpp.

98 {
99  HRESULT hr = CoCreateInstance(CLSID_ConnectionTray, 0, 1u, IID_PPV_ARG(IOleCommandTarget, &pctNetShell));
100  if (FAILED(hr))
101  return hr;
102 
103  return pctNetShell->Exec(&CGID_ShellServiceObject,
104  OLECMDID_NEW,
106 }
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 * u
Definition: glfuncs.h:240
HRESULT hr
Definition: shlfolder.c:183
#define IID_PPV_ARG(Itype, ppType)
LONG HRESULT
Definition: typedefs.h:79
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 NULL
Definition: types.h:112

Referenced by InitIcons().

◆ IsServiceEnabled()

BOOL CSysTray::IsServiceEnabled ( DWORD  dwServiceFlag)

Definition at line 92 of file csystray.cpp.

93 {
94  return (this->dwServicesEnabled & dwServiceFlag);
95 }
DWORD dwServicesEnabled
Definition: csystray.h:31

◆ NotifyIcon()

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

Definition at line 207 of file csystray.cpp.

208 {
209  NOTIFYICONDATA nim = { 0 };
210 
211  TRACE("NotifyIcon code=%d, uId=%d, hIcon=%p, szTip=%S\n", code, uId, hIcon, szTip);
212 
213  nim.cbSize = sizeof(nim);
214  nim.uFlags = NIF_MESSAGE | NIF_ICON | NIF_STATE | NIF_TIP;
215  nim.hIcon = hIcon;
216  nim.uID = uId;
217  nim.uCallbackMessage = uId;
218  nim.dwState = dwstate;
219  nim.dwStateMask = NIS_HIDDEN;
220  nim.hWnd = m_hWnd;
221  nim.uVersion = NOTIFYICON_VERSION;
222  if (szTip)
223  StringCchCopy(nim.szTip, _countof(nim.szTip), szTip);
224  else
225  nim.szTip[0] = 0;
226  BOOL ret = Shell_NotifyIcon(code, &nim);
227  return ret ? S_OK : E_FAIL;
228 }
#define NIF_MESSAGE
Definition: shellapi.h:102
#define E_FAIL
Definition: ddrawi.h:102
unsigned int BOOL
Definition: ntddk_ex.h:94
DWORD dwStateMask
Definition: shellapi.h:237
CHAR szTip[128]
Definition: shellapi.h:235
#define NIF_TIP
Definition: shellapi.h:104
#define NIF_ICON
Definition: shellapi.h:103
#define TRACE(s)
Definition: solgame.cpp:4
#define _countof(array)
Definition: sndvol32.h:68
int ret
#define StringCchCopy
Definition: strsafe.h:139
Definition: inflate.c:139
UINT uCallbackMessage
Definition: shellapi.h:229
#define S_OK
Definition: intsafe.h:52
HICON hIcon
Definition: msconfig.c:44
#define Shell_NotifyIcon
Definition: shellapi.h:689

◆ ProcessIconMessage()

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

Definition at line 171 of file csystray.cpp.

172 {
173  for (int i = 0; i < g_NumIcons; i++)
174  {
175  HRESULT hr = g_IconHandlers[i].pfnMessage(this, uMsg, wParam, lParam, lResult);
176  if (FAILED(hr))
177  return hr;
178 
179  if (hr == S_OK)
180  return hr;
181  }
182 
183  // Not handled by anyone, so return accordingly.
184  return S_FALSE;
185 }
HRESULT hr
Definition: shlfolder.c:183
const int g_NumIcons
Definition: csystray.cpp:21
SysTrayIconHandlers_t g_IconHandlers[]
Definition: csystray.cpp:16
WPARAM wParam
Definition: combotst.c:138
#define S_FALSE
Definition: winerror.h:2357
LONG HRESULT
Definition: typedefs.h:79
#define S_OK
Definition: intsafe.h:52
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
PFNSTMESSAGE pfnMessage
Definition: precomp.h:55
LPARAM lParam
Definition: combotst.c:139

Referenced by ProcessWindowMessage().

◆ ProcessWindowMessage()

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

Definition at line 315 of file csystray.cpp.

316 {
317  HRESULT hr;
318 
319  if (hWnd != m_hWnd)
320  return FALSE;
321 
322  if (wm_DESTROYWINDOW && uMsg == wm_DESTROYWINDOW)
323  {
324  return DestroyWindow();
325  }
326 
327  if (wm_SHELLHOOK && uMsg == wm_SHELLHOOK)
328  {
329  if (wParam == HSHELL_ACCESSIBILITYSTATE && lParam == ACCESS_MOUSEKEYS)
330  {
331  MouseKeys_Update(this);
332  }
333  lResult = 0L;
334  return TRUE;
335  }
336 
337  switch (uMsg)
338  {
339  case WM_NCCREATE:
340  case WM_NCDESTROY:
341  return FALSE;
342 
343  case WM_CREATE:
345  InitIcons();
346  SetTimer(1, 2000, NULL);
348  return TRUE;
349 
350  case WM_TIMER:
351  if (wParam == 1)
352  UpdateIcons();
353  else
354  ProcessIconMessage(uMsg, wParam, lParam, lResult);
355  return TRUE;
356 
357  case WM_SETTINGCHANGE:
358  if (wParam == SPI_SETMOUSEKEYS)
359  {
360  MouseKeys_Update(this);
361  }
362  break;
363 
364  case WM_DESTROY:
365  KillTimer(1);
367  ShutdownIcons();
368  PostQuitMessage(0);
369  return TRUE;
370  }
371 
372  TRACE("SysTray message received %u (%08p %08p)\n", uMsg, wParam, lParam);
373 
374  hr = ProcessIconMessage(uMsg, wParam, lParam, lResult);
375  if (FAILED(hr))
376  return FALSE;
377 
378  return (hr == S_OK);
379 }
#define SPI_SETMOUSEKEYS
Definition: winuser.h:1394
HRESULT hr
Definition: shlfolder.c:183
#define TRUE
Definition: types.h:120
HWND hWnd
Definition: settings.c:17
UINT wm_SHELLHOOK
Definition: csystray.h:32
#define WM_NCCREATE
Definition: winuser.h:1673
BOOL WINAPI DestroyWindow(_In_ HWND)
WPARAM wParam
Definition: combotst.c:138
#define WM_SETTINGCHANGE
Definition: winuser.h:1619
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define WM_DESTROY
Definition: winuser.h:1599
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
#define WM_TIMER
Definition: winuser.h:1732
#define WM_NCDESTROY
Definition: winuser.h:1674
UINT wm_DESTROYWINDOW
Definition: csystray.h:33
HRESULT ShutdownIcons()
Definition: csystray.cpp:137
HRESULT STDMETHODCALLTYPE MouseKeys_Update(_In_ CSysTray *pSysTray)
Definition: mouse.cpp:43
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
BOOL WINAPI RegisterShellHookWindow(_In_ HWND)
#define S_OK
Definition: intsafe.h:52
HRESULT ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult)
Definition: csystray.cpp:171
HRESULT InitIcons()
Definition: csystray.cpp:119
HRESULT UpdateIcons()
Definition: csystray.cpp:155
#define NULL
Definition: types.h:112
VOID GetServicesEnabled()
Definition: csystray.cpp:33
#define WM_CREATE
Definition: winuser.h:1598
BOOL WINAPI DeregisterShellHookWindow(_In_ HWND)
LPARAM lParam
Definition: combotst.c:139
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)

◆ QueryStatus()

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

Implements IOleCommandTarget.

Definition at line 294 of file csystray.cpp.

295 {
297  return S_OK;
298 }
#define S_OK
Definition: intsafe.h:52
#define UNIMPLEMENTED
Definition: debug.h:115

◆ s_SysTrayThreadProc()

DWORD WINAPI CSysTray::s_SysTrayThreadProc ( PVOID  param)
staticprivate

Definition at line 230 of file csystray.cpp.

231 {
232  CSysTray * st = (CSysTray*) param;
233  return st->SysTrayThreadProc();
234 }
GLfloat param
Definition: glext.h:5796
HRESULT SysTrayThreadProc()
Definition: csystray.cpp:253

Referenced by CreateSysTrayThread().

◆ ShutdownIcons()

HRESULT CSysTray::ShutdownIcons ( )
private

Definition at line 137 of file csystray.cpp.

138 {
139  TRACE("Shutting down Notification icons...\n");
140  for (int i = 0; i < g_NumIcons; i++)
141  {
142  if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
143  {
147  }
148  }
149 
150  MouseKeys_Shutdown(this);
151 
152  return ShutdownNetShell();
153 }
HRESULT hr
Definition: shlfolder.c:183
const int g_NumIcons
Definition: csystray.cpp:21
SysTrayIconHandlers_t g_IconHandlers[]
Definition: csystray.cpp:16
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwServicesEnabled
Definition: csystray.h:31
LONG HRESULT
Definition: typedefs.h:79
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
HRESULT ShutdownNetShell()
Definition: csystray.cpp:108
HRESULT STDMETHODCALLTYPE MouseKeys_Shutdown(_In_ CSysTray *pSysTray)
Definition: mouse.cpp:23
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
PFNSTSHUTDOWN pfnShutdown
Definition: precomp.h:53

Referenced by ProcessWindowMessage().

◆ ShutdownNetShell()

HRESULT CSysTray::ShutdownNetShell ( )
private

Definition at line 108 of file csystray.cpp.

109 {
110  if (!pctNetShell)
111  return S_FALSE;
112  HRESULT hr = pctNetShell->Exec(&CGID_ShellServiceObject,
115  pctNetShell.Release();
116  return hr;
117 }
HRESULT hr
Definition: shlfolder.c:183
#define S_FALSE
Definition: winerror.h:2357
LONG HRESULT
Definition: typedefs.h:79
CComPtr< IOleCommandTarget > pctNetShell
Definition: csystray.h:27
#define NULL
Definition: types.h:112

Referenced by ShutdownIcons().

◆ SysTrayMessageLoop()

HRESULT CSysTray::SysTrayMessageLoop ( )
private

Definition at line 236 of file csystray.cpp.

237 {
238  BOOL ret;
239  MSG msg;
240 
241  while ((ret = GetMessage(&msg, NULL, 0, 0)) != 0)
242  {
243  if (ret < 0)
244  break;
245 
248  }
249 
250  return S_OK;
251 }
#define DispatchMessage
Definition: winuser.h:5755
BOOL WINAPI TranslateMessage(_In_ const MSG *)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
unsigned int BOOL
Definition: ntddk_ex.h:94
int ret
#define S_OK
Definition: intsafe.h:52
#define NULL
Definition: types.h:112
#define GetMessage
Definition: winuser.h:5780
#define msg(x)
Definition: auth_time.c:54

Referenced by SysTrayThreadProc().

◆ SysTrayThreadProc()

HRESULT CSysTray::SysTrayThreadProc ( )
private

Definition at line 253 of file csystray.cpp.

254 {
255  WCHAR strFileName[MAX_PATH];
256  GetModuleFileNameW(g_hInstance, strFileName, MAX_PATH);
257  HMODULE hLib = LoadLibraryW(strFileName);
258 
260 
261  Create(NULL);
262 
264 
265  CoUninitialize();
266 
267  Release();
269 }
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
_In_ BOOLEAN Create
Definition: pstypes.h:527
VOID WINAPI FreeLibraryAndExitThread(HMODULE hLibModule, DWORD dwExitCode)
Definition: loader.c:507
ULONG Release()
#define LoadLibraryW(x)
Definition: compat.h:747
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define MAX_PATH
Definition: compat.h:34
int ret
HRESULT SysTrayMessageLoop()
Definition: csystray.cpp:236
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
#define NULL
Definition: types.h:112
HINSTANCE g_hInstance
Definition: MainWindow.cpp:18

Referenced by s_SysTrayThreadProc().

◆ UpdateIcons()

HRESULT CSysTray::UpdateIcons ( )
private

Definition at line 155 of file csystray.cpp.

156 {
157  TRACE("Updating Notification icons...\n");
158  for (int i = 0; i < g_NumIcons; i++)
159  {
160  if (this->dwServicesEnabled & g_IconHandlers[i].dwServiceFlag)
161  {
163  if (FAILED(hr))
164  return hr;
165  }
166  }
167 
168  return S_OK;
169 }
HRESULT hr
Definition: shlfolder.c:183
const int g_NumIcons
Definition: csystray.cpp:21
SysTrayIconHandlers_t g_IconHandlers[]
Definition: csystray.cpp:16
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwServicesEnabled
Definition: csystray.h:31
LONG HRESULT
Definition: typedefs.h:79
PFNSTUPDATE pfnUpdate
Definition: precomp.h:54
#define S_OK
Definition: intsafe.h:52
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

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.

Referenced by CSysTray(), DestroySysTrayWindow(), and ProcessWindowMessage().

◆ 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: