Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408#ifndef _EXPLORER_PRECOMP__H_#define _EXPLORER_PRECOMP__H_
#define WIN7_COMPAT_MODE 0#define WIN7_DEBUG_MODE 0
#if WIN7_DEBUG_MODE && !WIN7_COMPAT_MODE#undef WIN7_COMPAT_MODE#define WIN7_COMPAT_MODE 1#endif
#include <stdio.h>#include <tchar.h>
#define WIN32_NO_STATUS#define _INC_WINDOWS#define COM_NO_WINDOWS_H
#define COBJMACROS#define OEMRESOURCE
#include <windef.h>#include <winbase.h>#include <winreg.h>#include <wingdi.h>#include <winnls.h>#include <wincon.h>#include <atlbase.h>#include <atlcom.h>#include <atlwin.h>#include <atlstr.h>#include <atlcoll.h>#include <atlsimpcoll.h>#include <shellapi.h>#include <shlobj.h>#include <shlwapi.h>#include <uxtheme.h>#include <process.h>#include <strsafe.h>
#include <undocuser.h>#include <shlwapi_undoc.h>#include <shlobj_undoc.h>#include <shlguid_undoc.h>#include <shdocvw_undoc.h>#include <undocshell.h>
#include <ui/rosctrls.h>#include <ui/rosdlgs.h>#include <shellutils.h>
#include "tmschema.h"#include "resource.h"
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(explorernew);
#define ASSERT(cond) \ do if (!(cond)) { \ Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \ } while (0)
extern HINSTANCE hExplorerInstance;extern HANDLE hProcessHeap;extern HKEY hkExplorer;extern BOOL bExplorerIsShell;
/* * explorer.c */
static inlineLONGSetWindowStyle(IN HWND hWnd, IN LONG dwStyleMask, IN LONG dwStyle){ return SHSetWindowBits(hWnd, GWL_STYLE, dwStyleMask, dwStyle);}
static inlineLONGSetWindowExStyle(IN HWND hWnd, IN LONG dwStyleMask, IN LONG dwStyle){ return SHSetWindowBits(hWnd, GWL_EXSTYLE, dwStyleMask, dwStyle);}
HMENULoadPopupMenu(IN HINSTANCE hInstance, IN LPCWSTR lpMenuName);
HMENUFindSubMenu(IN HMENU hMenu, IN UINT uItem, IN BOOL fByPosition);
BOOLGetCurrentLoggedOnUserName(OUT LPWSTR szBuffer, IN DWORD dwBufferSize);
BOOLFormatMenuString(IN HMENU hMenu, IN UINT uPosition, IN UINT uFlags, ...);
BOOL GetRegValue(IN LPCWSTR pszSubKey, IN LPCWSTR pszValueName, IN BOOL bDefaultValue);BOOL SetRegDword(IN LPCWSTR pszSubKey, IN LPCWSTR pszValueName, IN DWORD dwValue);BOOL GetAdvancedBool(IN LPCWSTR pszValueName, IN BOOL bDefaultValue);BOOL SetAdvancedDword(IN LPCWSTR pszValueName, IN DWORD dwValue);
/* * rshell.c */
VOID InitRSHELL(VOID);HRESULT WINAPI _CStartMenu_CreateInstance(REFIID riid, void **ppv);HANDLE WINAPI _SHCreateDesktop(IShellDesktopTray *ShellDesk);BOOL WINAPI _SHDesktopMessageLoop(HANDLE hDesktop);BOOL WINAPI _WinList_Init(void);void WINAPI _ShellDDEInit(BOOL bInit);HRESULT WINAPI _CBandSiteMenu_CreateInstance(REFIID riid, void **ppv);HRESULT WINAPI _CBandSite_CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, void **ppv);
/* * traywnd.c */
#define TWM_GETTASKSWITCH (WM_USER + 236)#define TWM_OPENSTARTMENU (WM_USER + 260)#define TWM_SETTINGSCHANGED (WM_USER + 300)#define TWM_SETZORDER (WM_USER + 338)
extern const GUID IID_IShellDesktopTray;
#define INTERFACE ITrayWindowDECLARE_INTERFACE_(ITrayWindow, IUnknown){ /*** IUnknown methods ***/ STDMETHOD_(HRESULT, QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; /*** ITrayWindow methods ***/ STDMETHOD_(HRESULT, Open) (THIS) PURE; STDMETHOD_(HRESULT, Close) (THIS) PURE; STDMETHOD_(HWND, GetHWND) (THIS) PURE; STDMETHOD_(BOOL, IsSpecialHWND) (THIS_ HWND hWnd) PURE; STDMETHOD_(BOOL, IsHorizontal) (THIS) PURE; STDMETHOD_(HWND, DisplayProperties) (THIS) PURE; STDMETHOD_(BOOL, ExecContextMenuCmd) (THIS_ UINT uiCmd) PURE; STDMETHOD_(BOOL, Lock) (THIS_ BOOL bLock) PURE; STDMETHOD_(BOOL, IsTaskWnd) (THIS_ HWND hWnd) PURE; STDMETHOD_(HRESULT, NotifyFullScreenToAppBars)(THIS_ HMONITOR hMonitor, BOOL bFullOpening) PURE;};#undef INTERFACE
#if defined(COBJMACROS)/*** IUnknown methods ***/#define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)#define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)#define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)/*** ITrayWindow methods ***/#define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)#define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)#define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)#define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)#define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)#define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)#define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)#define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)#define ITrayWindow_IsTaskWnd(p,a) (p)->lpVtbl->IsTaskWnd(p,a)#define ITrayWindow_NotifyFullScreenToAppBars(p,a,b) (p)->lpVtbl->NotifyFullScreenToAppBars(p,a,b)#endif
HRESULT CreateTrayWindow(ITrayWindow ** ppTray);
VOIDTrayProcessMessages(IN OUT ITrayWindow *Tray);
VOIDTrayMessageLoop(IN OUT ITrayWindow *Tray);
/* * settings.c */
enum TrayIconsMode{ TIM_Default, TIM_NeverCompact, TIM_AlwaysCompact, TIM_Max = TIM_AlwaysCompact};
typedef struct _TW_STUCKRECTS2{ DWORD cbSize; LONG Unknown; union { DWORD dwFlags; struct { DWORD AutoHide : 1; DWORD AlwaysOnTop : 1; DWORD SmSmallIcons : 1; // Start menu Small Icons DWORD HideClock : 1; }; }; DWORD Position; SIZE Size; RECT Rect;} TW_STRUCKRECTS2, *PTW_STUCKRECTS2;
struct TaskbarSettings{ BOOL bLock; BOOL bGroupButtons; BOOL bShowSeconds; BOOL bPreferDate; BOOL bHideInactiveIcons; BOOL bSmallIcons; TrayIconsMode eCompactTrayIcons; BOOL bShowDesktopButton; TW_STRUCKRECTS2 sr;
BOOL Load(); BOOL Save(); inline BOOL UseCompactTrayIcons() { switch (eCompactTrayIcons) { case TIM_NeverCompact: return FALSE; case TIM_AlwaysCompact: return TRUE; default: return bSmallIcons; } }};
extern TaskbarSettings g_TaskbarSettings;
/* * shellservice.cpp */HRESULT InitShellServices(HDPA * phdpa);HRESULT ShutdownShellServices(HDPA hdpa);
/* * startup.cpp */
VOID ReleaseStartupMutex();VOID ProcessRunOnceItems();BOOL DoStartStartupItems(ITrayWindow *Tray);INT ProcessStartupItems(BOOL bRunOnce);static inline INT ProcessStartupItems() { return ProcessStartupItems(FALSE); }static inline VOID DoFinishStartupItems() { ReleaseStartupMutex(); }
/* * trayprop.h */
VOIDDisplayTrayProperties(IN HWND hwndOwner, IN HWND hwndTaskbar);
/* * desktop.cpp */HANDLEDesktopCreateWindow(IN OUT ITrayWindow *Tray);
VOIDDesktopDestroyShellWindow(IN HANDLE hDesktop);
/* * notifyiconscust.cpp */VOIDShowCustomizeNotifyIcons(HINSTANCE, HWND);
/* * taskband.cpp */
extern const GUID CLSID_ITaskBand; /* Internal Task Band CLSID */HRESULT CTaskBand_CreateInstance(IN ITrayWindow *Tray, HWND hWndStartButton, REFIID riid, void **ppv);
/* * tbsite.cpp */
#define INTERFACE ITrayBandSiteDECLARE_INTERFACE_(ITrayBandSite, IUnknown){ /*** IUnknown methods ***/ STDMETHOD_(HRESULT, QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; /*** IBandSiteStreamCallback ***/ STDMETHOD_(HRESULT, OnLoad)(THIS_ IStream *pStm, REFIID riid, PVOID *pvObj) PURE; STDMETHOD_(HRESULT, OnSave)(THIS_ IUnknown *pUnk, IStream *pStm) PURE; /*** ITrayBandSite methods ***/ STDMETHOD_(HRESULT, IsTaskBand) (THIS_ IUnknown *punk) PURE; STDMETHOD_(HRESULT, ProcessMessage) (THIS_ HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *plResult) PURE; STDMETHOD_(HRESULT, AddContextMenus) (THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags, IContextMenu **ppcm) PURE; STDMETHOD_(HRESULT, Lock) (THIS_ BOOL bLock) PURE;};#undef INTERFACE
#if defined(COBJMACROS)/*** IUnknown methods ***/#define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)#define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)#define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)/*** IBandSiteStreamCallback methods ***/#define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)#define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)/*** ITrayBandSite methods ***/#define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)#define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)#define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)#define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)#endif
HRESULT CTrayBandSite_CreateInstance(IN ITrayWindow *tray, IN IDeskBand* pTaskBand, OUT ITrayBandSite** pBandSite);
/* * startctxmnu.cpp */HRESULT CStartMenuBtnCtxMenu_CreateInstance(ITrayWindow * TrayWnd, IN HWND hWndOwner, IContextMenu ** ppCtxMenu);
/* * startmnu.cpp */IMenuPopup*CreateStartMenu(IN ITrayWindow *Tray, OUT IMenuBand **ppMenuBand, IN HBITMAP hbmBanner OPTIONAL, IN BOOL bSmallIcons);HRESULTUpdateStartMenu(IN OUT IMenuPopup *pMenuPopup, IN HBITMAP hbmBanner OPTIONAL, IN BOOL bSmallIcons, IN BOOL bRefresh);
/* * startmnucust.cpp */VOIDShowCustomizeClassic(HINSTANCE, HWND);VOIDClearRecentAndMru();
/** startmnusite.cpp*/HRESULTCStartMenuSite_CreateInstance(IN OUT ITrayWindow *Tray, const IID & riid, PVOID * ppv);
/* * trayntfy.c */
/* TrayClockWnd */HRESULT CTrayClockWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv);
static inline BOOL GetHideClock(){ return g_TaskbarSettings.sr.HideClock || SHRestricted(REST_HIDECLOCK);}
/* TrayNotifyWnd */#define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)#define TNWM_CHANGETRAYPOS (WM_USER + 0x104)#define TNWM_GETSHOWDESKTOPBUTTON (WM_USER + 0x7601)
#define NTNWM_REALIGN (0x1)
HRESULT CTrayNotifyWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv);
/* SysPagerWnd */HRESULT CSysPagerWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv);
#include "traydeskbtn.h"
/* * taskswnd.c */
#define TSWM_UPDATETASKBARPOS (WM_USER + 2)
HRESULT CTaskSwitchWnd_CreateInstance(IN HWND hWndParent, IN OUT ITrayWindow *Tray, REFIID riid, void **ppv);
HRESULTTray_OnStartMenuDismissed(ITrayWindow* Tray);
HRESULTIsSameObject(IN IUnknown *punk1, IN IUnknown *punk2);
#endif /* _EXPLORER_PRECOMP__H_ */