ReactOS  0.4.14-dev-49-gfb4591c
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 {
31 public:
32 };
33 
34 BEGIN_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
53 static BOOL
55 {
56  HANDLE hEvent;
57 
58  hEvent = OpenEventW(EVENT_MODIFY_STATE, FALSE, lpEventName);
59  if (hEvent != NULL)
60  {
62 
64  return TRUE;
65  }
66 
67  return FALSE;
68 }
69 
70 static 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
91 static 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 
113 static 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 */
145  _WinList_Init();
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 
185  OleUninitialize();
186 
188  hkExplorer = NULL;
189 
191 
192  return 0;
193 }
194 
195 INT WINAPI
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 
223  return StartWithDesktop(hInstance);
224 }
#define IN
Definition: typedefs.h:38
HWND WINAPI GetShellWindow(VOID)
Definition: desktop.c:651
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:398
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:925
INT ProcessStartupItems(VOID)
Definition: startup.cpp:336
BOOL bExplorerIsShell
Definition: explorer.cpp:27
#define ERROR_SUCCESS
Definition: deptool.c:10
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define _countof(array)
Definition: fontsub.cpp:30
#define HKEY_CURRENT_USER
Definition: winreg.h:11
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:733
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
static INT StartWithDesktop(IN HINSTANCE hInstance)
Definition: explorer.cpp:114
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int32_t INT
Definition: typedefs.h:56
VOID TrayMessageLoop(IN OUT ITrayWindow *Tray)
void Term()
Definition: atlbase.h:820
static VOID HideMinimizedWindows(IN BOOL bHide)
Definition: explorer.cpp:71
CHAR * LPTSTR
Definition: xmlstorage.h:192
VOID DesktopDestroyShellWindow(IN HANDLE hDesktop)
Definition: desktop.cpp:133
HANDLE WINAPI DECLSPEC_HOTPATCH OpenEventW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
Definition: synch.c:682
static HANDLE hEvent
Definition: comm.c:54
INT WINAPI _tWinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPTSTR lpCmdLine, IN INT nCmdShow)
Definition: explorer.cpp:196
VOID InitRSHELL(VOID)
Definition: rshell.cpp:27
BOOL WINAPI SetProcessShutdownParameters(IN DWORD dwLevel, IN DWORD dwFlags)
Definition: proc.c:949
HRESULT Init(_ATL_OBJMAP_ENTRY *p, HINSTANCE, const GUID *plibid)
Definition: atlbase.h:797
HKEY hkExplorer
Definition: explorer.cpp:26
HINSTANCE hInstance
Definition: charmap.c:20
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned int BOOL
Definition: ntddk_ex.h:94
static BOOL SetShellReadyEvent(IN LPCWSTR lpEventName)
Definition: explorer.cpp:54
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3296
smooth NULL
Definition: ftsmooth.c:416
TaskbarSettings g_TaskbarSettings
Definition: settings.cpp:23
BOOL WINAPI FileIconInit(BOOL bFullInit)
Definition: shellord.c:1298
#define b
Definition: ke_i.h:79
CAtlWinModule gWinModule
Definition: explorer.cpp:38
BOOL WINAPI SystemParametersInfoW(_In_ UINT, _In_ UINT, _Inout_opt_ PVOID, _In_ UINT)
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:395
__wchar_t WCHAR
Definition: xmlstorage.h:180
HINSTANCE hExplorerInstance
Definition: explorer.cpp:24
HRESULT CreateTrayWindow(ITrayWindow **ppTray)
Definition: traywnd.cpp:3390
#define WINAPI
Definition: msvc.h:8
void WINAPI _ShellDDEInit(BOOL bInit)
Definition: rshell.cpp:139
BOOL WINAPI SHCreateFromDesktop(ExplorerCommandLineParseResults *parseResults)
Definition: desktopipc.cpp:606
UINT_PTR WINAPI SHExplorerParseCmdLine(ExplorerCommandLineParseResults *pInfo)
CHAR Message[80]
Definition: alive.c:5
static const WCHAR L[]
Definition: oid.c:1250
static VOID InitializeAtlModule(HINSTANCE hInstance, BOOL bInitialize)
Definition: explorer.cpp:40
#define MB_ICONERROR
Definition: winuser.h:781
#define MessageBox
Definition: winuser.h:5723
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
Definition: ole2.c:172
#define ERR(fmt,...)
Definition: debug.h:109
HANDLE DesktopCreateWindow(IN OUT ITrayWindow *Tray)
Definition: desktop.cpp:118
static INT StartWithCommandLine(IN HINSTANCE hInstance)
Definition: explorer.cpp:92
BOOL DoFinishStartupItems(VOID)
Definition: startup.cpp:389
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:331
#define EVENT_MODIFY_STATE
Definition: winbase.h:163
#define ARW_HIDE
Definition: winuser.h:1066
#define BEGIN_OBJECT_MAP(x)
Definition: atlcom.h:649
VOID WINAPI InitCommonControls(void)
Definition: commctrl.c:863
DWORD WINAPI _WinList_Init(void)
Definition: rshell.cpp:110
HANDLE hProcessHeap
Definition: explorer.cpp:25
#define IDS_STARTUP_ERROR
Definition: resource.h:97
CExplorerModule gModule
Definition: explorer.cpp:37
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
Definition: ole2.c:233
BOOL DoStartStartupItems(ITrayWindow *Tray)
Definition: startup.cpp:400
#define END_OBJECT_MAP()
Definition: atlcom.h:651