ReactOS 0.4.16-dev-1279-gc894716
precomp.h
Go to the documentation of this file.
1#ifndef _EXPLORER_PRECOMP__H_
2#define _EXPLORER_PRECOMP__H_
3
4#define WIN7_COMPAT_MODE 0
5#define WIN7_DEBUG_MODE 0
6
7#if WIN7_DEBUG_MODE && !WIN7_COMPAT_MODE
8#undef WIN7_COMPAT_MODE
9#define WIN7_COMPAT_MODE 1
10#endif
11
12#include <stdio.h>
13#include <tchar.h>
14
15#define WIN32_NO_STATUS
16#define _INC_WINDOWS
17#define COM_NO_WINDOWS_H
18
19#define COBJMACROS
20#define OEMRESOURCE
21
22#include <windef.h>
23#include <winbase.h>
24#include <winreg.h>
25#include <wingdi.h>
26#include <winnls.h>
27#include <wincon.h>
28#include <atlbase.h>
29#include <atlcom.h>
30#include <atlwin.h>
31#include <atlstr.h>
32#include <atlcoll.h>
33#include <atlsimpcoll.h>
34#include <shellapi.h>
35#include <shlobj.h>
36#include <shlwapi.h>
37#include <uxtheme.h>
38#include <process.h>
39#include <strsafe.h>
40
41#include <undocuser.h>
42#include <shlwapi_undoc.h>
43#include <shlobj_undoc.h>
44#include <shlguid_undoc.h>
45#include <shdocvw_undoc.h>
46#include <undocshell.h>
47
48#include <ui/rosctrls.h>
49#include <ui/rosdlgs.h>
50#include <shellutils.h>
51
52#include "tmschema.h"
53#include "resource.h"
54
55#include <wine/debug.h>
56
58
59#define ASSERT(cond) \
60 do if (!(cond)) { \
61 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
62 } while (0)
63
65extern HANDLE hProcessHeap;
66extern HKEY hkExplorer;
68
69/*
70 * explorer.c
71 */
72
73static inline
74LONG
76 IN LONG dwStyleMask,
77 IN LONG dwStyle)
78{
79 return SHSetWindowBits(hWnd, GWL_STYLE, dwStyleMask, dwStyle);
80}
81
82static inline
83LONG
85 IN LONG dwStyleMask,
86 IN LONG dwStyle)
87{
88 return SHSetWindowBits(hWnd, GWL_EXSTYLE, dwStyleMask, dwStyle);
89}
90
93 IN LPCWSTR lpMenuName);
94
96FindSubMenu(IN HMENU hMenu,
97 IN UINT uItem,
98 IN BOOL fByPosition);
99
100BOOL
102 IN DWORD dwBufferSize);
103
104BOOL
106 IN UINT uPosition,
107 IN UINT uFlags,
108 ...);
109
110BOOL GetRegValue(IN LPCWSTR pszSubKey, IN LPCWSTR pszValueName, IN BOOL bDefaultValue);
111BOOL SetRegDword(IN LPCWSTR pszSubKey, IN LPCWSTR pszValueName, IN DWORD dwValue);
112BOOL GetAdvancedBool(IN LPCWSTR pszValueName, IN BOOL bDefaultValue);
113BOOL SetAdvancedDword(IN LPCWSTR pszValueName, IN DWORD dwValue);
114
115/*
116 * rshell.c
117 */
118
121HANDLE WINAPI _SHCreateDesktop(IShellDesktopTray *ShellDesk);
124void WINAPI _ShellDDEInit(BOOL bInit);
127
128/*
129 * traywnd.c
130 */
131
132#define TWM_GETTASKSWITCH (WM_USER + 236)
133#define TWM_OPENSTARTMENU (WM_USER + 260)
134#define TWM_SETTINGSCHANGED (WM_USER + 300)
135#define TWM_SETZORDER (WM_USER + 338)
136#define TWM_PULSE (WM_USER + 400)
137
138extern const GUID IID_IShellDesktopTray;
139
140#define INTERFACE ITrayWindow
142{
143 /*** IUnknown methods ***/
147 /*** ITrayWindow methods ***/
150 STDMETHOD_(HWND, GetHWND) (THIS) PURE;
151 STDMETHOD_(BOOL, IsSpecialHWND) (THIS_ HWND hWnd) PURE;
152 STDMETHOD_(BOOL, IsHorizontal) (THIS) PURE;
153 STDMETHOD_(HWND, DisplayProperties) (THIS) PURE;
154 STDMETHOD_(BOOL, ExecContextMenuCmd) (THIS_ UINT uiCmd) PURE;
155 STDMETHOD_(BOOL, Lock) (THIS_ BOOL bLock) PURE;
156 STDMETHOD_(BOOL, IsTaskWnd) (THIS_ HWND hWnd) PURE;
157};
158#undef INTERFACE
159
160#if defined(COBJMACROS)
161/*** IUnknown methods ***/
162#define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
163#define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
164#define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
165/*** ITrayWindow methods ***/
166#define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
167#define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
168#define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
169#define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
170#define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
171#define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
172#define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
173#define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
174#define ITrayWindow_IsTaskWnd(p,a) (p)->lpVtbl->IsTaskWnd(p,a)
175#endif
176
177HRESULT CreateTrayWindow(ITrayWindow ** ppTray);
178
179VOID
180TrayProcessMessages(IN OUT ITrayWindow *Tray);
181
182VOID
183TrayMessageLoop(IN OUT ITrayWindow *Tray);
184
185/*
186 * settings.c
187 */
188
190{
196
197typedef struct _TW_STUCKRECTS2
198{
201 union
202 {
204 struct
205 {
208 DWORD SmSmallIcons : 1; // Start menu Small Icons
210 };
211 };
216
218{
228
229 BOOL Load();
230 BOOL Save();
232 {
233 switch (eCompactTrayIcons)
234 {
235 case TIM_NeverCompact:
236 return FALSE;
238 return TRUE;
239 default:
240 return bSmallIcons;
241 }
242 }
243};
244
246
247/*
248 * shellservice.cpp
249 */
252
253/*
254 * startup.cpp
255 */
256
259BOOL DoStartStartupItems(ITrayWindow *Tray);
263
264/*
265 * trayprop.h
266 */
267
268VOID
269DisplayTrayProperties(IN HWND hwndOwner, IN HWND hwndTaskbar);
270
271/*
272 * desktop.cpp
273 */
274HANDLE
275DesktopCreateWindow(IN OUT ITrayWindow *Tray);
276
277VOID
279
280
281/*
282 * notifyiconscust.cpp
283 */
284VOID
286
287/*
288 * taskband.cpp
289 */
290
291extern const GUID CLSID_ITaskBand; /* Internal Task Band CLSID */
292HRESULT CTaskBand_CreateInstance(IN ITrayWindow *Tray, HWND hWndStartButton, REFIID riid, void **ppv);
293
294/*
295 * tbsite.cpp
296 */
297
298#define INTERFACE ITrayBandSite
300{
301 /*** IUnknown methods ***/
305 /*** IBandSiteStreamCallback ***/
306 STDMETHOD_(HRESULT, OnLoad)(THIS_ IStream *pStm, REFIID riid, PVOID *pvObj) PURE;
307 STDMETHOD_(HRESULT, OnSave)(THIS_ IUnknown *pUnk, IStream *pStm) PURE;
308 /*** ITrayBandSite methods ***/
309 STDMETHOD_(HRESULT, IsTaskBand) (THIS_ IUnknown *punk) PURE;
310 STDMETHOD_(HRESULT, ProcessMessage) (THIS_ HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plResult) PURE;
311 STDMETHOD_(HRESULT, AddContextMenus) (THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags, IContextMenu **ppcm) PURE;
313};
314#undef INTERFACE
315
316#if defined(COBJMACROS)
317/*** IUnknown methods ***/
318#define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
319#define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
320#define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
321/*** IBandSiteStreamCallback methods ***/
322#define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
323#define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
324/*** ITrayBandSite methods ***/
325#define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
326#define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
327#define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
328#define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
329#endif
330
331HRESULT CTrayBandSite_CreateInstance(IN ITrayWindow *tray, IN IDeskBand* pTaskBand, OUT ITrayBandSite** pBandSite);
332
333/*
334 * startctxmnu.cpp
335 */
336HRESULT CStartMenuBtnCtxMenu_CreateInstance(ITrayWindow * TrayWnd, IN HWND hWndOwner, IContextMenu ** ppCtxMenu);
337
338/*
339 * startmnu.cpp
340 */
342CreateStartMenu(IN ITrayWindow *Tray,
343 OUT IMenuBand **ppMenuBand,
344 IN HBITMAP hbmBanner OPTIONAL,
345 IN BOOL bSmallIcons);
347UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup,
348 IN HBITMAP hbmBanner OPTIONAL,
349 IN BOOL bSmallIcons,
350 IN BOOL bRefresh);
351
352/*
353 * startmnucust.cpp
354 */
355VOID
357VOID
359
360/*
361* startmnusite.cpp
362*/
364CStartMenuSite_CreateInstance(IN OUT ITrayWindow *Tray, const IID & riid, PVOID * ppv);
365
366/*
367 * trayntfy.c
368 */
369
370/* TrayClockWnd */
372
373static inline BOOL GetHideClock()
374{
376}
377
378/* TrayNotifyWnd */
379#define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
380#define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
381#define TNWM_GETSHOWDESKTOPBUTTON (WM_USER + 0x7601)
382
383#define NTNWM_REALIGN (0x1)
384
386
387/* SysPagerWnd */
389
390#include "traydeskbtn.h"
391
392/*
393 * taskswnd.c
394 */
395
396#define TSWM_UPDATETASKBARPOS (WM_USER + 2)
397
399
401Tray_OnStartMenuDismissed(ITrayWindow* Tray);
402
404IsSameObject(IN IUnknown *punk1, IN IUnknown *punk2);
405
406#endif /* _EXPLORER_PRECOMP__H_ */
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
VOID DisplayTrayProperties(IN HWND hwndOwner, IN HWND hwndTaskbar)
Definition: trayprop.cpp:363
const GUID IID_IShellDesktopTray
Definition: traywnd.cpp:176
HMENU FindSubMenu(IN HMENU hMenu, IN UINT uItem, IN BOOL fByPosition)
Definition: util.cpp:55
VOID DesktopDestroyShellWindow(IN HANDLE hDesktop)
Definition: desktop.cpp:203
HRESULT CTrayClockWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv)
Definition: trayclock.cpp:783
BOOL FormatMenuString(IN HMENU hMenu, IN UINT uPosition, IN UINT uFlags,...)
Definition: util.cpp:106
BOOL SetAdvancedDword(IN LPCWSTR pszValueName, IN DWORD dwValue)
Definition: util.cpp:161
HRESULT CSysPagerWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv)
Definition: syspager.cpp:1614
struct _TW_STUCKRECTS2 TW_STRUCKRECTS2
HRESULT UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup, IN HBITMAP hbmBanner OPTIONAL, IN BOOL bSmallIcons, IN BOOL bRefresh)
Definition: startmnu.cpp:24
VOID TrayMessageLoop(IN OUT ITrayWindow *Tray)
BOOL GetAdvancedBool(IN LPCWSTR pszValueName, IN BOOL bDefaultValue)
Definition: util.cpp:156
HRESULT WINAPI _CBandSite_CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, void **ppv)
Definition: rshell.cpp:186
HRESULT CStartMenuBtnCtxMenu_CreateInstance(ITrayWindow *TrayWnd, IN HWND hWndOwner, IContextMenu **ppCtxMenu)
HRESULT CTaskSwitchWnd_CreateInstance(IN HWND hWndParent, IN OUT ITrayWindow *Tray, REFIID riid, void **ppv)
Definition: taskswnd.cpp:2067
HMENU LoadPopupMenu(IN HINSTANCE hInstance, IN LPCWSTR lpMenuName)
Definition: util.cpp:33
VOID TrayProcessMessages(IN OUT ITrayWindow *Tray)
BOOL WINAPI _SHDesktopMessageLoop(HANDLE hDesktop)
Definition: rshell.cpp:81
IMenuPopup * CreateStartMenu(IN ITrayWindow *Tray, OUT IMenuBand **ppMenuBand, IN HBITMAP hbmBanner OPTIONAL, IN BOOL bSmallIcons)
Definition: startmnu.cpp:50
HRESULT CStartMenuSite_CreateInstance(IN OUT ITrayWindow *Tray, const IID &riid, PVOID *ppv)
HRESULT WINAPI _CBandSiteMenu_CreateInstance(REFIID riid, void **ppv)
Definition: rshell.cpp:167
static VOID DoFinishStartupItems()
Definition: precomp.h:262
VOID ReleaseStartupMutex()
Definition: startup.cpp:513
TrayIconsMode
Definition: precomp.h:190
@ TIM_AlwaysCompact
Definition: precomp.h:193
@ TIM_NeverCompact
Definition: precomp.h:192
@ TIM_Max
Definition: precomp.h:194
@ TIM_Default
Definition: precomp.h:191
HRESULT Tray_OnStartMenuDismissed(ITrayWindow *Tray)
Definition: traywnd.cpp:3780
void WINAPI _ShellDDEInit(BOOL bInit)
Definition: rshell.cpp:139
HRESULT CreateTrayWindow(ITrayWindow **ppTray)
Definition: traywnd.cpp:3765
TaskbarSettings g_TaskbarSettings
Definition: settings.cpp:23
VOID ShowCustomizeClassic(HINSTANCE, HWND)
HANDLE DesktopCreateWindow(IN OUT ITrayWindow *Tray)
Definition: desktop.cpp:188
BOOL GetCurrentLoggedOnUserName(OUT LPWSTR szBuffer, IN DWORD dwBufferSize)
Definition: util.cpp:73
VOID ProcessRunOnceItems()
Definition: startup.cpp:588
HRESULT CTrayNotifyWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv)
Definition: trayntfy.cpp:555
struct _TW_STUCKRECTS2 * PTW_STUCKRECTS2
HRESULT CTrayBandSite_CreateInstance(IN ITrayWindow *tray, IN IDeskBand *pTaskBand, OUT ITrayBandSite **pBandSite)
Definition: tbsite.cpp:728
BOOL bExplorerIsShell
Definition: explorer.cpp:27
HRESULT IsSameObject(IN IUnknown *punk1, IN IUnknown *punk2)
Definition: util.cpp:11
BOOL SetRegDword(IN LPCWSTR pszSubKey, IN LPCWSTR pszValueName, IN DWORD dwValue)
Definition: util.cpp:148
BOOL GetRegValue(IN LPCWSTR pszSubKey, IN LPCWSTR pszValueName, IN BOOL bDefaultValue)
static INT ProcessStartupItems()
Definition: precomp.h:261
HANDLE WINAPI _SHCreateDesktop(IShellDesktopTray *ShellDesk)
Definition: rshell.cpp:52
const GUID CLSID_ITaskBand
Definition: taskband.cpp:27
VOID InitRSHELL(VOID)
Definition: rshell.cpp:27
VOID ShowCustomizeNotifyIcons(HINSTANCE, HWND)
HINSTANCE hExplorerInstance
Definition: explorer.cpp:24
HRESULT InitShellServices(HDPA *phdpa)
BOOL DoStartStartupItems(ITrayWindow *Tray)
Definition: startup.cpp:549
HKEY hkExplorer
Definition: explorer.cpp:26
HRESULT CTaskBand_CreateInstance(IN ITrayWindow *Tray, HWND hWndStartButton, REFIID riid, void **ppv)
Definition: taskband.cpp:348
VOID ClearRecentAndMru()
HRESULT ShutdownShellServices(HDPA hdpa)
HANDLE hProcessHeap
Definition: explorer.cpp:25
BOOL WINAPI _WinList_Init(void)
Definition: rshell.cpp:110
static BOOL GetHideClock()
Definition: precomp.h:373
HRESULT WINAPI _CStartMenu_CreateInstance(REFIID riid, void **ppv)
Definition: rshell.cpp:32
#define DECLARE_INTERFACE_(i, b)
Definition: basetyps.h:78
#define PURE
Definition: basetyps.h:64
#define THIS_
Definition: basetyps.h:65
#define THIS
Definition: basetyps.h:66
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
_In_ BOOLEAN Release
Definition: cdrom.h:920
HINSTANCE hInstance
Definition: charmap.c:19
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static HWND hwndParent
Definition: cryptui.c:300
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
UINT uFlags
Definition: api.c:59
LONG WINAPI SHSetWindowBits(HWND hwnd, INT offset, UINT mask, UINT flags)
Definition: ordinal.c:1130
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define Open
Definition: syshdrs.h:62
#define SetWindowStyle(hwnd, val)
Definition: utility.h:153
#define SetWindowExStyle(h, val)
Definition: utility.h:154
static HBITMAP
Definition: button.c:44
static HRESULT QueryInterface(REFIID, void **)
Definition: events.c:2587
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static HMENU hmenu
Definition: win.c:66
unsigned int UINT
Definition: ndis.h:50
static LPUNKNOWN
Definition: ndr_ole.c:49
long LONG
Definition: pedump.c:60
#define REFIID
Definition: guiddef.h:118
@ Close
Definition: sacdrv.h:268
@ REST_HIDECLOCK
Definition: shlobj.h:1810
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:166
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
BOOL bGroupButtons
Definition: precomp.h:220
BOOL bShowDesktopButton
Definition: precomp.h:226
BOOL bHideInactiveIcons
Definition: precomp.h:223
TW_STRUCKRECTS2 sr
Definition: precomp.h:227
BOOL bShowSeconds
Definition: precomp.h:221
TrayIconsMode eCompactTrayIcons
Definition: precomp.h:225
BOOL UseCompactTrayIcons()
Definition: precomp.h:231
BOOL bPreferDate
Definition: precomp.h:222
BOOL bSmallIcons
Definition: precomp.h:224
Definition: dpa.c:49
DWORD AutoHide
Definition: precomp.h:206
DWORD HideClock
Definition: precomp.h:209
DWORD AlwaysOnTop
Definition: precomp.h:207
DWORD dwFlags
Definition: precomp.h:203
DWORD SmSmallIcons
Definition: precomp.h:208
DWORD Position
Definition: precomp.h:212
DWORD cbSize
Definition: precomp.h:199
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
Definition: wdfsync.h:127
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define GWL_STYLE
Definition: winuser.h:863
#define GWL_EXSTYLE
Definition: winuser.h:862
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185