1 #ifndef _EXPLORER_PRECOMP__H_
2 #define _EXPLORER_PRECOMP__H_
5 #define WIN32_NO_STATUS
7 #define COM_NO_WINDOWS_H
18 #include <shlobj_undoc.h>
20 #include <shlguid_undoc.h>
29 //#include "initguid.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
,
174 #define TWM_OPENSTARTMENU (WM_USER + 260)
176 typedef HMENU (*PCREATECTXMENU
)(IN HWND hWndOwner
,
177 IN PVOID
*ppcmContext
,
178 IN PVOID Context OPTIONAL
);
179 typedef VOID (*PCTXMENUCOMMAND
)(IN HWND hWndOwner
,
181 IN PVOID pcmContext OPTIONAL
,
182 IN PVOID Context OPTIONAL
);
184 typedef struct _TRAYWINDOW_CTXMENU
186 PCREATECTXMENU CreateCtxMenu
;
187 PCTXMENUCOMMAND CtxMenuCommand
;
188 } TRAYWINDOW_CTXMENU
, *PTRAYWINDOW_CTXMENU
;
190 extern const GUID IID_IShellDesktopTray
;
192 #define INTERFACE ITrayWindow
193 DECLARE_INTERFACE_(ITrayWindow
,IUnknown
)
195 /*** IUnknown methods ***/
196 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
197 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
198 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
199 /*** ITrayWindow methods ***/
200 STDMETHOD_(HRESULT
,Open
) (THIS
) PURE
;
201 STDMETHOD_(HRESULT
,Close
) (THIS
) PURE
;
202 STDMETHOD_(HWND
,GetHWND
) (THIS
) PURE
;
203 STDMETHOD_(BOOL
,IsSpecialHWND
) (THIS_ HWND hWnd
) PURE
;
204 STDMETHOD_(BOOL
,IsHorizontal
) (THIS
) PURE
;
205 STDMETHOD_(HFONT
,GetCaptionFonts
) (THIS_ HFONT
*phBoldCaption
) PURE
;
206 STDMETHOD_(HWND
,DisplayProperties
) (THIS
) PURE
;
207 STDMETHOD_(BOOL
,ExecContextMenuCmd
) (THIS_ UINT uiCmd
) PURE
;
208 STDMETHOD_(BOOL
,Lock
) (THIS_ BOOL bLock
) PURE
;
212 #if defined(COBJMACROS)
213 /*** IUnknown methods ***/
214 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
215 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
216 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
217 /*** ITrayWindow methods ***/
218 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
219 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
220 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
221 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
222 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
223 #define ITrayWindow_GetCaptionFonts(p,a) (p)->lpVtbl->GetCaptionFonts(p,a)
224 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
225 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
226 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
230 RegisterTrayWindowClass(VOID
);
233 UnregisterTrayWindowClass(VOID
);
236 CreateTrayWindow(VOID
);
239 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
242 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
248 /* Structure to hold non-default options*/
249 typedef struct _ADVANCED_SETTINGS
{
251 } ADVANCED_SETTINGS
, *PADVANCED_SETTINGS
;
253 extern ADVANCED_SETTINGS AdvancedSettings
;
254 extern const TCHAR szAdvancedSettingsKey
[];
257 LoadAdvancedSettings(VOID
);
260 SaveSettingDword(IN PCTSTR pszKeyName
,
261 IN PCTSTR pszValueName
,
269 ProcessStartupItems(VOID
);
276 DisplayTrayProperties(IN HWND hwndOwner
);
282 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
285 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
291 /* Internal Task Band CLSID */
292 extern const GUID CLSID_ITaskBand
;
294 #define INTERFACE ITaskBand
295 DECLARE_INTERFACE_(ITaskBand
,IUnknown
)
297 /*** IUnknown methods ***/
298 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
299 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
300 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
301 /*** ITaskBand methods ***/
302 STDMETHOD_(HRESULT
,GetRebarBandID
)(THIS_ DWORD
*pdwBandID
) PURE
;
306 #if defined(COBJMACROS)
307 /*** IUnknown methods ***/
308 #define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
309 #define ITaskBand_AddRef(p) (p)->lpVtbl->AddRef(p)
310 #define ITaskBand_Release(p) (p)->lpVtbl->Release(p)
311 /*** ITaskBand methods ***/
312 #define ITaskBand_GetRebarBandID(p,a) (p)->lpVtbl->GetRebarBandID(p,a)
316 CreateTaskBand(IN OUT ITrayWindow
*Tray
);
322 #define INTERFACE ITrayBandSite
323 DECLARE_INTERFACE_(ITrayBandSite
,IUnknown
)
325 /*** IUnknown methods ***/
326 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
327 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
328 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
329 /*** IBandSiteStreamCallback ***/
330 STDMETHOD_(HRESULT
,OnLoad
)(THIS_ IStream
*pStm
, REFIID riid
, PVOID
*pvObj
) PURE
;
331 STDMETHOD_(HRESULT
,OnSave
)(THIS_ IUnknown
*pUnk
, IStream
*pStm
) PURE
;
332 /*** ITrayBandSite methods ***/
333 STDMETHOD_(HRESULT
,IsTaskBand
) (THIS_ IUnknown
*punk
) PURE
;
334 STDMETHOD_(HRESULT
,ProcessMessage
) (THIS_ HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
) PURE
;
335 STDMETHOD_(HRESULT
,AddContextMenus
) (THIS_ HMENU hmenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
, IContextMenu
**ppcm
) PURE
;
336 STDMETHOD_(HRESULT
,Lock
) (THIS_ BOOL bLock
) PURE
;
340 #if defined(COBJMACROS)
341 /*** IUnknown methods ***/
342 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
343 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
344 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
345 /*** IBandSiteStreamCallback methods ***/
346 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
347 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
348 /*** ITrayBandSite methods ***/
349 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
350 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
351 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
352 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
356 CreateTrayBandSite(IN OUT ITrayWindow
*Tray
,
357 OUT HWND
*phWndRebar
,
358 OUT HWND
*phWndTaskSwitch
);
364 extern const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu
;
366 #define INTERFACE IStartMenuSite
367 DECLARE_INTERFACE_(IStartMenuSite
,IUnknown
)
369 /*** IUnknown methods ***/
370 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
371 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
372 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
373 /*** IStartMenuSite ***/
377 #if defined(COBJMACROS)
378 /*** IUnknown methods ***/
379 #define IStartMenuSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
380 #define IStartMenuSite_AddRef(p) (p)->lpVtbl->AddRef(p)
381 #define IStartMenuSite_Release(p) (p)->lpVtbl->Release(p)
382 /*** IStartMenuSite methods ***/
386 CreateStartMenu(IN ITrayWindow
*Tray
,
387 OUT IMenuBand
**ppMenuBand
,
388 IN HBITMAP hbmBanner OPTIONAL
,
389 IN BOOL bSmallIcons
);
392 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
393 IN HBITMAP hbmBanner OPTIONAL
,
394 IN BOOL bSmallIcons
);
401 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
402 #define TCWM_UPDATETIME (WM_USER + 0x101)
405 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
406 #define TNWM_UPDATETIME (WM_USER + 0x101)
407 #define TNWM_SHOWCLOCK (WM_USER + 0x102)
408 #define TNWM_SHOWTRAY (WM_USER + 0x103)
409 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
411 #define NTNWM_REALIGN (0x1)
414 RegisterTrayNotifyWndClass(VOID
);
417 UnregisterTrayNotifyWndClass(VOID
);
420 CreateTrayNotifyWnd(IN OUT ITrayWindow
*TrayWindow
,
424 TrayNotify_NotifyMsg(IN HWND hwnd
,
429 TrayNotify_GetClockRect(IN HWND hwnd
,
436 #define TSWM_ENABLEGROUPING (WM_USER + 1)
437 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
440 RegisterTaskSwitchWndClass(VOID
);
443 UnregisterTaskSwitchWndClass(VOID
);
446 CreateTaskSwitchWnd(IN HWND hWndParent
,
447 IN OUT ITrayWindow
*Tray
);
449 #endif /* _EXPLORER_PRECOMP__H_ */