ReactOS 0.4.15-dev-8348-gc1b9bb5
explorer.cpp
Go to the documentation of this file.
1/*
2 * ReactOS Explorer
3 *
4 * Copyright 2006 - 2007 Thomas Weidenmueller <w3seek@reactos.org>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#include "precomp.h"
22#include <browseui_undoc.h>
23
28
30{
31public:
32};
33
34BEGIN_OBJECT_MAP(ObjectMap)
36
39
41{
42 if (bInitialize)
43 {
44 gModule.Init(ObjectMap, hInstance, NULL);
45 }
46 else
47 {
48 gModule.Term();
49 }
50}
51
52#if !WIN7_DEBUG_MODE
53static BOOL
55{
57
59 if (hEvent != NULL)
60 {
62
64 return TRUE;
65 }
66
67 return FALSE;
68}
69
70static VOID
72{
74
75 mm.cbSize = sizeof(mm);
76 if (!SystemParametersInfoW(SPI_GETMINIMIZEDMETRICS, sizeof(mm), &mm, 0))
77 {
78 ERR("SystemParametersInfoW failed with %lu\n", GetLastError());
79 return;
80 }
81 if (bHide)
82 mm.iArrange |= ARW_HIDE;
83 else
84 mm.iArrange &= ~ARW_HIDE;
85 if (!SystemParametersInfoW(SPI_SETMINIMIZEDMETRICS, sizeof(mm), &mm, 0))
86 ERR("SystemParametersInfoW failed with %lu\n", GetLastError());
87}
88#endif
89
90#if !WIN7_COMPAT_MODE
91static INT
93{
94 BOOL b = FALSE;
95 EXPLORER_CMDLINE_PARSE_RESULTS parseResults = { 0 };
96
97 if (SHExplorerParseCmdLine(&parseResults))
98 b = SHCreateFromDesktop(&parseResults);
99
100 if (parseResults.strPath)
101 SHFree(parseResults.strPath);
102
103 if (parseResults.pidlPath)
104 ILFree(parseResults.pidlPath);
105
106 if (parseResults.pidlRoot)
107 ILFree(parseResults.pidlRoot);
108
109 return b;
110}
111#endif
112
113static INT
115{
117
119 L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer",
121 {
122 WCHAR Message[256];
125 return 1;
126 }
127
130
132
135
136#if !WIN7_COMPAT_MODE
137 /* Initialize shell dde support */
139#endif
140
141 /* Initialize shell icons */
143
144 /* Initialize CLSID_ShellWindows class */
146
148 CreateTrayWindow(&Tray);
149
150#if !WIN7_DEBUG_MODE
151 /* This not only hides the minimized window captions in the bottom
152 left screen corner, but is also needed in order to receive
153 HSHELL_* notification messages (which are required for taskbar
154 buttons to work right) */
156
157 HANDLE hShellDesktop = NULL;
158 if (Tray != NULL)
159 hShellDesktop = DesktopCreateWindow(Tray);
160
161 /* WinXP: Notify msgina to hide the welcome screen */
162 if (!SetShellReadyEvent(L"msgina: ShellReadyEvent"))
163 SetShellReadyEvent(L"Global\\msgina: ShellReadyEvent");
164
165 if (DoStartStartupItems(Tray))
166 {
169 }
170#endif
171
172 if (Tray != NULL)
173 {
174 TrayMessageLoop(Tray);
175#if !WIN7_DEBUG_MODE
177#endif
178 }
179
180#if !WIN7_DEBUG_MODE
181 if (hShellDesktop != NULL)
182 DesktopDestroyShellWindow(hShellDesktop);
183#endif
184
186
189
191
192 return 0;
193}
194
197 IN HINSTANCE hPrevInstance,
198 IN LPTSTR lpCmdLine,
199 IN INT nCmdShow)
200{
201 /*
202 * Set our shutdown parameters: we want to shutdown the very last,
203 * but before any TaskMgr instance (which has a shutdown level of 1).
204 */
206
207 InitRSHELL();
208
209 TRACE("Explorer starting... Command line: %S\n", lpCmdLine);
210
211#if !WIN7_COMPAT_MODE
212 if (GetShellWindow() == NULL)
214
215 if (!bExplorerIsShell)
216 {
218 }
219#else
221#endif
222
224}
#define ERR(fmt,...)
Definition: precomp.h:57
VOID DesktopDestroyShellWindow(IN HANDLE hDesktop)
Definition: desktop.cpp:203
HANDLE DesktopCreateWindow(IN OUT ITrayWindow *Tray)
Definition: desktop.cpp:188
static VOID InitializeAtlModule(HINSTANCE hInstance, BOOL bInitialize)
Definition: explorer.cpp:40
CAtlWinModule gWinModule
Definition: explorer.cpp:38
static VOID HideMinimizedWindows(IN BOOL bHide)
Definition: explorer.cpp:71
static INT StartWithCommandLine(IN HINSTANCE hInstance)
Definition: explorer.cpp:92
CExplorerModule gModule
Definition: explorer.cpp:37
BOOL bExplorerIsShell
Definition: explorer.cpp:27
static BOOL SetShellReadyEvent(IN LPCWSTR lpEventName)
Definition: explorer.cpp:54
HINSTANCE hExplorerInstance
Definition: explorer.cpp:24
HKEY hkExplorer
Definition: explorer.cpp:26
HANDLE hProcessHeap
Definition: explorer.cpp:25
static INT StartWithDesktop(IN HINSTANCE hInstance)
Definition: explorer.cpp:114
INT ProcessStartupItems(VOID)
Definition: startup.cpp:453
VOID TrayMessageLoop(IN OUT ITrayWindow *Tray)
void WINAPI _ShellDDEInit(BOOL bInit)
Definition: rshell.cpp:139
DWORD WINAPI _WinList_Init(void)
Definition: rshell.cpp:110
HRESULT CreateTrayWindow(ITrayWindow **ppTray)
Definition: traywnd.cpp:3878
TaskbarSettings g_TaskbarSettings
Definition: settings.cpp:23
VOID InitRSHELL(VOID)
Definition: rshell.cpp:27
BOOL DoStartStartupItems(ITrayWindow *Tray)
Definition: startup.cpp:519
BOOL DoFinishStartupItems(VOID)
Definition: startup.cpp:508
#define IDS_STARTUP_ERROR
Definition: resource.h:98
#define RegCloseKey(hKey)
Definition: registry.h:49
HINSTANCE hInstance
Definition: charmap.c:19
void Term()
Definition: atlbase.h:916
HRESULT Init(_ATL_OBJMAP_ENTRY *p, HINSTANCE, const GUID *plibid)
Definition: atlbase.h:886
VOID WINAPI InitCommonControls(void)
Definition: commctrl.c:863
#define ERROR_SUCCESS
Definition: deptool.c:10
BOOL WINAPI SHCreateFromDesktop(_In_ PEXPLORER_CMDLINE_PARSE_RESULTS parseResults)
Definition: desktopipc.cpp:619
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
#define CloseHandle
Definition: compat.h:739
#define GetProcessHeap()
Definition: compat.h:736
BOOL WINAPI SetProcessShutdownParameters(IN DWORD dwLevel, IN DWORD dwFlags)
Definition: proc.c:949
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
Definition: ole2.c:169
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
Definition: ole2.c:230
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
static const WCHAR Message[]
Definition: register.c:74
unsigned int BOOL
Definition: ntddk_ex.h:94
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define _tWinMain
Definition: tchar.h:498
#define b
Definition: ke_i.h:79
#define END_OBJECT_MAP()
Definition: atlcom.h:691
#define BEGIN_OBJECT_MAP(x)
Definition: atlcom.h:689
static HANDLE hEvent
Definition: comm.c:54
#define L(x)
Definition: ntvdm.h:50
UINT_PTR WINAPI SHExplorerParseCmdLine(_Out_ PEXPLORER_CMDLINE_PARSE_RESULTS pInfo)
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:940
BOOL WINAPI FileIconInit(BOOL bFullInit)
Definition: shellord.c:1878
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
HANDLE WINAPI DECLSPEC_HOTPATCH OpenEventW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
Definition: synch.c:682
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:733
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
HWND WINAPI GetShellWindow(VOID)
Definition: desktop.c:651
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define EVENT_MODIFY_STATE
Definition: winbase.h:163
#define WINAPI
Definition: msvc.h:6
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define ARW_HIDE
Definition: winuser.h:1076
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define MB_ICONERROR
Definition: winuser.h:787
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define MessageBox
Definition: winuser.h:5831
__wchar_t WCHAR
Definition: xmlstorage.h:180
CHAR * LPTSTR
Definition: xmlstorage.h:192
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185