1 #ifndef _EXPLORER_PRECOMP__H_
2 #define _EXPLORER_PRECOMP__H_
7 #define WIN32_NO_STATUS
9 #define COM_NO_WINDOWS_H
21 #include <shlobj_undoc.h>
23 #include <shlguid_undoc.h>
26 #include <undocuser.h>
32 /* dynamic imports due to lack of support in msvc linker libs */
33 typedef INT (APIENTRY
*REGSHELLHOOK
)(HWND
, DWORD
);
35 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempW"
36 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCWSTR
, UINT
);
38 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempA"
39 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCSTR
, UINT
);
41 typedef HRESULT (APIENTRY
*SHINVDEFCMD
)(HWND
, IShellFolder
*, LPCITEMIDLIST
);
42 typedef void (APIENTRY
*RUNFILEDLG
)(HWND
, HICON
, LPCWSTR
, LPCWSTR
, LPCWSTR
, UINT
);
43 typedef void (APIENTRY
*EXITWINDLG
)(HWND
);
44 typedef HRESULT (APIENTRY
*SHWINHELP
)(HWND
, LPWSTR
, UINT
, DWORD
);
46 /* Constants for RunFileDlg */
47 #define RFF_CALCDIRECTORY 0x04 /* Calculates the working directory from the file name. */
50 Win32DbgPrint(const char *filename
, int line
, const char *lpFormat
, ...)
58 fname
= strrchr(filename
, '\\');
61 fname
= strrchr(filename
, '/');
71 szMsgStart
= szMsg
+ sprintf(szMsg
, "%s:%d: ", fname
, line
);
73 va_start(vl
, lpFormat
);
74 uRet
= (ULONG
)vsprintf(szMsgStart
, lpFormat
, vl
);
77 OutputDebugStringA(szMsg
);
82 #define ASSERT(cond) \
84 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
87 #define DbgPrint(fmt, ...) \
88 Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
90 extern HINSTANCE hExplorerInstance
;
91 extern HMODULE hUser32
;
92 extern HANDLE hProcessHeap
;
93 extern HKEY hkExplorer
;
94 extern DRAWCAPTEMP DrawCapTemp
;
100 typedef struct _DROPTARGET_CALLBACKS
102 HRESULT (*OnDragEnter
)(IN IDropTarget
*pDropTarget
,
104 IN
const FORMATETC
*Format
,
105 IN DWORD grfKeyState
,
107 IN OUT DWORD
*pdwEffect
);
108 HRESULT (*OnDragOver
)(IN IDropTarget
*pDropTarget
,
110 IN DWORD grfKeyState
,
112 IN OUT DWORD
*pdwEffect
);
113 HRESULT (*OnDragLeave
)(IN IDropTarget
*pDropTarget
,
115 HRESULT (*OnDrop
)(IN IDropTarget
*pDropTarget
,
117 IN
const FORMATETC
*Format
,
118 IN DWORD grfKeyState
,
120 IN OUT DWORD
*pdwEffect
);
121 } DROPTARGET_CALLBACKS
, *PDROPTARGET_CALLBACKS
;
124 CreateDropTarget(IN HWND hwndTarget
,
125 IN DWORD nSupportedFormats
,
126 IN
const FORMATETC
*Formats OPTIONAL
,
127 IN PVOID Context OPTIONAL
,
128 IN
const DROPTARGET_CALLBACKS
*Callbacks OPTIONAL
);
134 #define IDHK_RUN 1 /* Win+R */
137 SetWindowStyle(IN HWND hWnd
,
142 SetWindowExStyle(IN HWND hWnd
,
147 LoadPopupMenu(IN HINSTANCE hInstance
,
148 IN LPCTSTR lpMenuName
);
151 FindSubMenu(IN HMENU hMenu
,
153 IN BOOL fByPosition
);
156 GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer
,
157 IN DWORD dwBufferSize
);
160 FormatMenuString(IN HMENU hMenu
,
166 GetExplorerRegValueSet(IN HKEY hKey
,
175 CStartMenu_Constructor(
183 #define TWM_OPENSTARTMENU (WM_USER + 260)
185 typedef HMENU (*PCREATECTXMENU
)(IN HWND hWndOwner
,
186 IN PVOID
*ppcmContext
,
187 IN PVOID Context OPTIONAL
);
188 typedef VOID (*PCTXMENUCOMMAND
)(IN HWND hWndOwner
,
190 IN PVOID pcmContext OPTIONAL
,
191 IN PVOID Context OPTIONAL
);
193 typedef struct _TRAYWINDOW_CTXMENU
195 PCREATECTXMENU CreateCtxMenu
;
196 PCTXMENUCOMMAND CtxMenuCommand
;
197 } TRAYWINDOW_CTXMENU
, *PTRAYWINDOW_CTXMENU
;
199 extern const GUID IID_IShellDesktopTray
;
201 #define INTERFACE ITrayWindow
202 DECLARE_INTERFACE_(ITrayWindow
,IUnknown
)
204 /*** IUnknown methods ***/
205 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
206 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
207 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
208 /*** ITrayWindow methods ***/
209 STDMETHOD_(HRESULT
,Open
) (THIS
) PURE
;
210 STDMETHOD_(HRESULT
,Close
) (THIS
) PURE
;
211 STDMETHOD_(HWND
,GetHWND
) (THIS
) PURE
;
212 STDMETHOD_(BOOL
,IsSpecialHWND
) (THIS_ HWND hWnd
) PURE
;
213 STDMETHOD_(BOOL
,IsHorizontal
) (THIS
) PURE
;
214 STDMETHOD_(HFONT
,GetCaptionFonts
) (THIS_ HFONT
*phBoldCaption
) PURE
;
215 STDMETHOD_(HWND
,DisplayProperties
) (THIS
) PURE
;
216 STDMETHOD_(BOOL
,ExecContextMenuCmd
) (THIS_ UINT uiCmd
) PURE
;
217 STDMETHOD_(BOOL
,Lock
) (THIS_ BOOL bLock
) PURE
;
221 #if defined(COBJMACROS)
222 /*** IUnknown methods ***/
223 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
224 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
225 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
226 /*** ITrayWindow methods ***/
227 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
228 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
229 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
230 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
231 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
232 #define ITrayWindow_GetCaptionFonts(p,a) (p)->lpVtbl->GetCaptionFonts(p,a)
233 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
234 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
235 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
239 RegisterTrayWindowClass(VOID
);
242 UnregisterTrayWindowClass(VOID
);
245 CreateTrayWindow(VOID
);
248 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
251 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
257 /* Structure to hold non-default options*/
258 typedef struct _ADVANCED_SETTINGS
{
260 } ADVANCED_SETTINGS
, *PADVANCED_SETTINGS
;
262 extern ADVANCED_SETTINGS AdvancedSettings
;
263 extern const TCHAR szAdvancedSettingsKey
[];
266 LoadAdvancedSettings(VOID
);
269 SaveSettingDword(IN PCTSTR pszKeyName
,
270 IN PCTSTR pszValueName
,
278 ProcessStartupItems(VOID
);
285 DisplayTrayProperties(IN HWND hwndOwner
);
291 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
294 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
300 /* Internal Task Band CLSID */
301 extern const GUID CLSID_ITaskBand
;
303 #define INTERFACE ITaskBand
304 DECLARE_INTERFACE_(ITaskBand
,IUnknown
)
306 /*** IUnknown methods ***/
307 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
308 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
309 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
310 /*** ITaskBand methods ***/
311 STDMETHOD_(HRESULT
,GetRebarBandID
)(THIS_ DWORD
*pdwBandID
) PURE
;
315 #if defined(COBJMACROS)
316 /*** IUnknown methods ***/
317 #define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
318 #define ITaskBand_AddRef(p) (p)->lpVtbl->AddRef(p)
319 #define ITaskBand_Release(p) (p)->lpVtbl->Release(p)
320 /*** ITaskBand methods ***/
321 #define ITaskBand_GetRebarBandID(p,a) (p)->lpVtbl->GetRebarBandID(p,a)
325 CreateTaskBand(IN OUT ITrayWindow
*Tray
);
331 #define INTERFACE ITrayBandSite
332 DECLARE_INTERFACE_(ITrayBandSite
,IUnknown
)
334 /*** IUnknown methods ***/
335 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
336 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
337 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
338 /*** IBandSiteStreamCallback ***/
339 STDMETHOD_(HRESULT
,OnLoad
)(THIS_ IStream
*pStm
, REFIID riid
, PVOID
*pvObj
) PURE
;
340 STDMETHOD_(HRESULT
,OnSave
)(THIS_ IUnknown
*pUnk
, IStream
*pStm
) PURE
;
341 /*** ITrayBandSite methods ***/
342 STDMETHOD_(HRESULT
,IsTaskBand
) (THIS_ IUnknown
*punk
) PURE
;
343 STDMETHOD_(HRESULT
,ProcessMessage
) (THIS_ HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
) PURE
;
344 STDMETHOD_(HRESULT
,AddContextMenus
) (THIS_ HMENU hmenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
, IContextMenu
**ppcm
) PURE
;
345 STDMETHOD_(HRESULT
,Lock
) (THIS_ BOOL bLock
) PURE
;
349 #if defined(COBJMACROS)
350 /*** IUnknown methods ***/
351 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
352 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
353 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
354 /*** IBandSiteStreamCallback methods ***/
355 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
356 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
357 /*** ITrayBandSite methods ***/
358 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
359 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
360 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
361 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
365 CreateTrayBandSite(IN OUT ITrayWindow
*Tray
,
366 OUT HWND
*phWndRebar
,
367 OUT HWND
*phWndTaskSwitch
);
373 extern const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu
;
375 #define INTERFACE IStartMenuSite
376 DECLARE_INTERFACE_(IStartMenuSite
,IUnknown
)
378 /*** IUnknown methods ***/
379 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
380 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
381 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
382 /*** IStartMenuSite ***/
386 #if defined(COBJMACROS)
387 /*** IUnknown methods ***/
388 #define IStartMenuSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
389 #define IStartMenuSite_AddRef(p) (p)->lpVtbl->AddRef(p)
390 #define IStartMenuSite_Release(p) (p)->lpVtbl->Release(p)
391 /*** IStartMenuSite methods ***/
395 CreateStartMenu(IN ITrayWindow
*Tray
,
396 OUT IMenuBand
**ppMenuBand
,
397 IN HBITMAP hbmBanner OPTIONAL
,
398 IN BOOL bSmallIcons
);
401 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
402 IN HBITMAP hbmBanner OPTIONAL
,
403 IN BOOL bSmallIcons
);
410 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
411 #define TCWM_UPDATETIME (WM_USER + 0x101)
414 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
415 #define TNWM_UPDATETIME (WM_USER + 0x101)
416 #define TNWM_SHOWCLOCK (WM_USER + 0x102)
417 #define TNWM_SHOWTRAY (WM_USER + 0x103)
418 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
420 #define NTNWM_REALIGN (0x1)
423 RegisterTrayNotifyWndClass(VOID
);
426 UnregisterTrayNotifyWndClass(VOID
);
429 CreateTrayNotifyWnd(IN OUT ITrayWindow
*TrayWindow
,
433 TrayNotify_NotifyMsg(IN HWND hwnd
,
438 TrayNotify_GetClockRect(IN HWND hwnd
,
445 #define TSWM_ENABLEGROUPING (WM_USER + 1)
446 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
449 RegisterTaskSwitchWndClass(VOID
);
452 UnregisterTaskSwitchWndClass(VOID
);
455 CreateTaskSwitchWnd(IN HWND hWndParent
,
456 IN OUT ITrayWindow
*Tray
);
458 #endif /* _EXPLORER_PRECOMP__H_ */