1 #ifndef _EXPLORER_PRECOMP__H_
2 #define _EXPLORER_PRECOMP__H_
5 #define WIN32_NO_STATUS
7 #define COM_NO_WINDOWS_H
17 #include <shlobj_undoc.h>
19 #include <shlguid_undoc.h>
28 //#include "initguid.h"
31 /* dynamic imports due to lack of support in msvc linker libs */
32 typedef INT (APIENTRY
*REGSHELLHOOK
)(HWND
, DWORD
);
34 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempW"
35 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCWSTR
, UINT
);
37 #define PROC_NAME_DRAWCAPTIONTEMP "DrawCaptionTempA"
38 typedef BOOL (APIENTRY
*DRAWCAPTEMP
)(HWND
, HDC
, const RECT
*, HFONT
, HICON
, LPCSTR
, UINT
);
40 typedef HRESULT (APIENTRY
*SHINVDEFCMD
)(HWND
, IShellFolder
*, LPCITEMIDLIST
);
41 typedef void (APIENTRY
*RUNFILEDLG
)(HWND
, HICON
, LPCWSTR
, LPCWSTR
, LPCWSTR
, UINT
);
42 typedef void (APIENTRY
*EXITWINDLG
)(HWND
);
43 typedef HRESULT (APIENTRY
*SHWINHELP
)(HWND
, LPWSTR
, UINT
, DWORD
);
45 /* Constants for RunFileDlg */
46 #define RFF_CALCDIRECTORY 0x04 /* Calculates the working directory from the file name. */
49 Win32DbgPrint(const char *filename
, int line
, const char *lpFormat
, ...)
57 fname
= strrchr(filename
, '\\');
60 fname
= strrchr(filename
, '/');
70 szMsgStart
= szMsg
+ sprintf(szMsg
, "%s:%d: ", fname
, line
);
72 va_start(vl
, lpFormat
);
73 uRet
= (ULONG
)vsprintf(szMsgStart
, lpFormat
, vl
);
76 OutputDebugStringA(szMsg
);
81 #define ASSERT(cond) \
83 Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \
86 #define DbgPrint(fmt, ...) \
87 Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__)
89 extern HINSTANCE hExplorerInstance
;
90 extern HMODULE hUser32
;
91 extern HANDLE hProcessHeap
;
92 extern HKEY hkExplorer
;
93 extern DRAWCAPTEMP DrawCapTemp
;
99 typedef struct _DROPTARGET_CALLBACKS
101 HRESULT (*OnDragEnter
)(IN IDropTarget
*pDropTarget
,
103 IN
const FORMATETC
*Format
,
104 IN DWORD grfKeyState
,
106 IN OUT DWORD
*pdwEffect
);
107 HRESULT (*OnDragOver
)(IN IDropTarget
*pDropTarget
,
109 IN DWORD grfKeyState
,
111 IN OUT DWORD
*pdwEffect
);
112 HRESULT (*OnDragLeave
)(IN IDropTarget
*pDropTarget
,
114 HRESULT (*OnDrop
)(IN IDropTarget
*pDropTarget
,
116 IN
const FORMATETC
*Format
,
117 IN DWORD grfKeyState
,
119 IN OUT DWORD
*pdwEffect
);
120 } DROPTARGET_CALLBACKS
, *PDROPTARGET_CALLBACKS
;
123 CreateDropTarget(IN HWND hwndTarget
,
124 IN DWORD nSupportedFormats
,
125 IN
const FORMATETC
*Formats OPTIONAL
,
126 IN PVOID Context OPTIONAL
,
127 IN
const DROPTARGET_CALLBACKS
*Callbacks OPTIONAL
);
133 #define IDHK_RUN 1 /* Win+R */
136 SetWindowStyle(IN HWND hWnd
,
141 SetWindowExStyle(IN HWND hWnd
,
146 LoadPopupMenu(IN HINSTANCE hInstance
,
147 IN LPCTSTR lpMenuName
);
150 FindSubMenu(IN HMENU hMenu
,
152 IN BOOL fByPosition
);
155 GetCurrentLoggedOnUserName(OUT LPTSTR szBuffer
,
156 IN DWORD dwBufferSize
);
159 FormatMenuString(IN HMENU hMenu
,
165 GetExplorerRegValueSet(IN HKEY hKey
,
173 #define TWM_OPENSTARTMENU (WM_USER + 260)
175 typedef HMENU (*PCREATECTXMENU
)(IN HWND hWndOwner
,
176 IN PVOID
*ppcmContext
,
177 IN PVOID Context OPTIONAL
);
178 typedef VOID (*PCTXMENUCOMMAND
)(IN HWND hWndOwner
,
180 IN PVOID pcmContext OPTIONAL
,
181 IN PVOID Context OPTIONAL
);
183 typedef struct _TRAYWINDOW_CTXMENU
185 PCREATECTXMENU CreateCtxMenu
;
186 PCTXMENUCOMMAND CtxMenuCommand
;
187 } TRAYWINDOW_CTXMENU
, *PTRAYWINDOW_CTXMENU
;
189 extern const GUID IID_IShellDesktopTray
;
191 #define INTERFACE ITrayWindow
192 DECLARE_INTERFACE_(ITrayWindow
,IUnknown
)
194 /*** IUnknown methods ***/
195 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
196 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
197 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
198 /*** ITrayWindow methods ***/
199 STDMETHOD_(HRESULT
,Open
) (THIS
) PURE
;
200 STDMETHOD_(HRESULT
,Close
) (THIS
) PURE
;
201 STDMETHOD_(HWND
,GetHWND
) (THIS
) PURE
;
202 STDMETHOD_(BOOL
,IsSpecialHWND
) (THIS_ HWND hWnd
) PURE
;
203 STDMETHOD_(BOOL
,IsHorizontal
) (THIS
) PURE
;
204 STDMETHOD_(HFONT
,GetCaptionFonts
) (THIS_ HFONT
*phBoldCaption
) PURE
;
205 STDMETHOD_(HWND
,DisplayProperties
) (THIS
) PURE
;
206 STDMETHOD_(BOOL
,ExecContextMenuCmd
) (THIS_ UINT uiCmd
) PURE
;
207 STDMETHOD_(BOOL
,Lock
) (THIS_ BOOL bLock
) PURE
;
211 #if defined(COBJMACROS)
212 /*** IUnknown methods ***/
213 #define ITrayWindow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
214 #define ITrayWindow_AddRef(p) (p)->lpVtbl->AddRef(p)
215 #define ITrayWindow_Release(p) (p)->lpVtbl->Release(p)
216 /*** ITrayWindow methods ***/
217 #define ITrayWindow_Open(p) (p)->lpVtbl->Open(p)
218 #define ITrayWindow_Close(p) (p)->lpVtbl->Close(p)
219 #define ITrayWindow_GetHWND(p) (p)->lpVtbl->GetHWND(p)
220 #define ITrayWindow_IsSpecialHWND(p,a) (p)->lpVtbl->IsSpecialHWND(p,a)
221 #define ITrayWindow_IsHorizontal(p) (p)->lpVtbl->IsHorizontal(p)
222 #define ITrayWindow_GetCaptionFonts(p,a) (p)->lpVtbl->GetCaptionFonts(p,a)
223 #define ITrayWindow_DisplayProperties(p) (p)->lpVtbl->DisplayProperties(p)
224 #define ITrayWindow_ExecContextMenuCmd(p,a) (p)->lpVtbl->ExecContextMenuCmd(p,a)
225 #define ITrayWindow_Lock(p,a) (p)->lpVtbl->Lock(p,a)
229 RegisterTrayWindowClass(VOID
);
232 UnregisterTrayWindowClass(VOID
);
235 CreateTrayWindow(VOID
);
238 TrayProcessMessages(IN OUT ITrayWindow
*Tray
);
241 TrayMessageLoop(IN OUT ITrayWindow
*Tray
);
247 /* Structure to hold non-default options*/
248 typedef struct _ADVANCED_SETTINGS
{
250 } ADVANCED_SETTINGS
, *PADVANCED_SETTINGS
;
252 extern ADVANCED_SETTINGS AdvancedSettings
;
253 extern const TCHAR szAdvancedSettingsKey
[];
256 LoadAdvancedSettings(VOID
);
259 SaveSettingDword(IN PCTSTR pszKeyName
,
260 IN PCTSTR pszValueName
,
268 ProcessStartupItems(VOID
);
275 DisplayTrayProperties(IN HWND hwndOwner
);
281 DesktopCreateWindow(IN OUT ITrayWindow
*Tray
);
284 DesktopDestroyShellWindow(IN HANDLE hDesktop
);
290 /* Internal Task Band CLSID */
291 extern const GUID CLSID_ITaskBand
;
293 #define INTERFACE ITaskBand
294 DECLARE_INTERFACE_(ITaskBand
,IUnknown
)
296 /*** IUnknown methods ***/
297 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
298 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
299 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
300 /*** ITaskBand methods ***/
301 STDMETHOD_(HRESULT
,GetRebarBandID
)(THIS_ DWORD
*pdwBandID
) PURE
;
305 #if defined(COBJMACROS)
306 /*** IUnknown methods ***/
307 #define ITaskBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
308 #define ITaskBand_AddRef(p) (p)->lpVtbl->AddRef(p)
309 #define ITaskBand_Release(p) (p)->lpVtbl->Release(p)
310 /*** ITaskBand methods ***/
311 #define ITaskBand_GetRebarBandID(p,a) (p)->lpVtbl->GetRebarBandID(p,a)
315 CreateTaskBand(IN OUT ITrayWindow
*Tray
);
321 #define INTERFACE ITrayBandSite
322 DECLARE_INTERFACE_(ITrayBandSite
,IUnknown
)
324 /*** IUnknown methods ***/
325 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
326 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
327 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
328 /*** IBandSiteStreamCallback ***/
329 STDMETHOD_(HRESULT
,OnLoad
)(THIS_ IStream
*pStm
, REFIID riid
, PVOID
*pvObj
) PURE
;
330 STDMETHOD_(HRESULT
,OnSave
)(THIS_ IUnknown
*pUnk
, IStream
*pStm
) PURE
;
331 /*** ITrayBandSite methods ***/
332 STDMETHOD_(HRESULT
,IsTaskBand
) (THIS_ IUnknown
*punk
) PURE
;
333 STDMETHOD_(HRESULT
,ProcessMessage
) (THIS_ HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
) PURE
;
334 STDMETHOD_(HRESULT
,AddContextMenus
) (THIS_ HMENU hmenu
, UINT indexMenu
, UINT idCmdFirst
, UINT idCmdLast
, UINT uFlags
, IContextMenu
**ppcm
) PURE
;
335 STDMETHOD_(HRESULT
,Lock
) (THIS_ BOOL bLock
) PURE
;
339 #if defined(COBJMACROS)
340 /*** IUnknown methods ***/
341 #define ITrayBandSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
342 #define ITrayBandSite_AddRef(p) (p)->lpVtbl->AddRef(p)
343 #define ITrayBandSite_Release(p) (p)->lpVtbl->Release(p)
344 /*** IBandSiteStreamCallback methods ***/
345 #define ITrayBandSite_OnLoad(p,a,b,c) (p)->lpVtbl->OnLoad(p,a,b,c)
346 #define ITrayBandSite_OnSave(p,a,b) (p)->lpVtbl->OnSave(p,a,b)
347 /*** ITrayBandSite methods ***/
348 #define ITrayBandSite_IsTaskBand(p,a) (p)->lpVtbl->IsTaskBand(p,a)
349 #define ITrayBandSite_ProcessMessage(p,a,b,c,d,e) (p)->lpVtbl->ProcessMessage(p,a,b,c,d,e)
350 #define ITrayBandSite_AddContextMenus(p,a,b,c,d,e,f) (p)->lpVtbl->AddContextMenus(p,a,b,c,d,e,f)
351 #define ITrayBandSite_Lock(p,a) (p)->lpVtbl->Lock(p,a)
355 CreateTrayBandSite(IN OUT ITrayWindow
*Tray
,
356 OUT HWND
*phWndRebar
,
357 OUT HWND
*phWndTaskSwitch
);
363 extern const TRAYWINDOW_CTXMENU StartMenuBtnCtxMenu
;
365 #define INTERFACE IStartMenuSite
366 DECLARE_INTERFACE_(IStartMenuSite
,IUnknown
)
368 /*** IUnknown methods ***/
369 STDMETHOD_(HRESULT
,QueryInterface
) (THIS_ REFIID riid
, void** ppvObject
) PURE
;
370 STDMETHOD_(ULONG
,AddRef
) (THIS
) PURE
;
371 STDMETHOD_(ULONG
,Release
) (THIS
) PURE
;
372 /*** IStartMenuSite ***/
376 #if defined(COBJMACROS)
377 /*** IUnknown methods ***/
378 #define IStartMenuSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
379 #define IStartMenuSite_AddRef(p) (p)->lpVtbl->AddRef(p)
380 #define IStartMenuSite_Release(p) (p)->lpVtbl->Release(p)
381 /*** IStartMenuSite methods ***/
385 CreateStartMenu(IN ITrayWindow
*Tray
,
386 OUT IMenuBand
**ppMenuBand
,
387 IN HBITMAP hbmBanner OPTIONAL
,
388 IN BOOL bSmallIcons
);
391 UpdateStartMenu(IN OUT IMenuPopup
*pMenuPopup
,
392 IN HBITMAP hbmBanner OPTIONAL
,
393 IN BOOL bSmallIcons
);
400 #define TCWM_GETMINIMUMSIZE (WM_USER + 0x100)
401 #define TCWM_UPDATETIME (WM_USER + 0x101)
404 #define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
405 #define TNWM_UPDATETIME (WM_USER + 0x101)
406 #define TNWM_SHOWCLOCK (WM_USER + 0x102)
407 #define TNWM_SHOWTRAY (WM_USER + 0x103)
408 #define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
410 #define NTNWM_REALIGN (0x1)
413 RegisterTrayNotifyWndClass(VOID
);
416 UnregisterTrayNotifyWndClass(VOID
);
419 CreateTrayNotifyWnd(IN OUT ITrayWindow
*TrayWindow
,
423 TrayNotify_NotifyMsg(IN HWND hwnd
,
431 #define TSWM_ENABLEGROUPING (WM_USER + 1)
432 #define TSWM_UPDATETASKBARPOS (WM_USER + 2)
435 RegisterTaskSwitchWndClass(VOID
);
438 UnregisterTaskSwitchWndClass(VOID
);
441 CreateTaskSwitchWnd(IN HWND hWndParent
,
442 IN OUT ITrayWindow
*Tray
);
444 #endif /* _EXPLORER_PRECOMP__H_ */