ReactOS 0.4.15-dev-8413-gc1c91f2
CDesktopBrowser.cpp
Go to the documentation of this file.
1/*
2 * Shell Desktop
3 *
4 * Copyright 2008 Thomas Bluemel
5 * Copyright 2020 Katayama Hirofumi MZ
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include "shelldesktop.h"
23
24// Support for multiple monitors is disabled till LVM_SETWORKAREAS gets implemented
25#ifdef MULTIMONITOR_SUPPORT
26#include <atlcoll.h>
27#endif
28
29#include <dbt.h>
30
32
33static const WCHAR szProgmanClassName[] = L"Progman";
34static const WCHAR szProgmanWindowName[] = L"Program Manager";
35
37 public CWindowImpl<CDesktopBrowser, CWindow, CFrameWinTraits>,
38 public CComObjectRootEx<CComMultiThreadModelNoCS>,
39 public IShellBrowser,
40 public IShellBrowserService,
41 public IServiceProvider
42{
43private:
44 HACCEL m_hAccel;
46 CComPtr<IShellDesktopTray> m_Tray;
47 CComPtr<IShellView> m_ShellView;
48
49 CComPtr<IOleWindow> m_ChangeNotifyServer;
52
55
56public:
59 HRESULT Initialize(IShellDesktopTray *ShellDeskx);
60
61 // *** IOleWindow methods ***
62 STDMETHOD(GetWindow)(HWND *lphwnd) override;
63 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override;
64
65 // *** IShellBrowser methods ***
66 STDMETHOD(InsertMenusSB)(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override;
67 STDMETHOD(SetMenuSB)(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override;
68 STDMETHOD(RemoveMenusSB)(HMENU hmenuShared) override;
69 STDMETHOD(SetStatusTextSB)(LPCOLESTR pszStatusText) override;
70 STDMETHOD(EnableModelessSB)(BOOL fEnable) override;
71 STDMETHOD(TranslateAcceleratorSB)(MSG *pmsg, WORD wID) override;
73 STDMETHOD(GetViewStateStream)(DWORD grfMode, IStream **ppStrm) override;
74 STDMETHOD(GetControlWindow)(UINT id, HWND *lphwnd) override;
76 STDMETHOD(QueryActiveShellView)(struct IShellView **ppshv) override;
77 STDMETHOD(OnViewWindowActive)(struct IShellView *ppshv) override;
78 STDMETHOD(SetToolbarItems)(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override;
79
80 // *** IShellBrowserService methods ***
81 STDMETHOD(GetPropertyBag)(long flags, REFIID riid, void **ppv) override;
82
83 // *** IBrowserService2 methods (fake for now) ***
84 inline void SetTopBrowser() const {}
85
86 // *** IServiceProvider methods ***
87 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override;
88
89 // message handlers
91 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
93 LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
101
103
118
121 COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser)
122 COM_INTERFACE_ENTRY_IID(IID_IShellBrowserService, IShellBrowserService)
123 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
125};
126
128 m_hAccel(NULL),
132{
134}
135
137{
139 {
140 m_ShellView->DestroyViewWindow();
141 }
142
144 {
146 }
147}
148
149#ifdef MULTIMONITOR_SUPPORT
151 _In_ HMONITOR hMonitor,
152 _In_ HDC hdcMonitor,
153 _In_ LPRECT lprcMonitor,
155)
156{
157 CAtlList<RECT> *list = (CAtlList<RECT>*)dwData;
158 MONITORINFO MonitorInfo;
159 MonitorInfo.cbSize = sizeof(MonitorInfo);
160 if (::GetMonitorInfoW(hMonitor, &MonitorInfo))
161 {
162 list->AddTail(MonitorInfo.rcWork);
163 }
164
165 return TRUE;
166}
167#endif
168
170{
171 RECT rcNewSize;
172
173#ifdef MULTIMONITOR_SUPPORT
174
176 if (cMonitors == 1)
177 {
178 SystemParametersInfoW(SPI_GETWORKAREA, 0, &rcNewSize, 0);
179 }
180 else
181 {
182 SetRect(&rcNewSize,
187 }
188
189 ::MoveWindow(m_hWnd, rcNewSize.left, rcNewSize.top, rcNewSize.right - rcNewSize.left, rcNewSize.bottom - rcNewSize.top, TRUE);
190 ::MoveWindow(m_hWndShellView, 0, 0, rcNewSize.right - rcNewSize.left, rcNewSize.bottom - rcNewSize.top, TRUE);
191
192 if (cMonitors != 1)
193 {
194 CAtlList<RECT> list;
196 RECT* prcWorkAreas = new RECT[list.GetCount()];
197 int i = 0;
198 for (POSITION it = list.GetHeadPosition(); it; list.GetNext(it))
199 prcWorkAreas[i++] = list.GetAt(it);
200
202
204 }
205
206#else
207 SystemParametersInfoW(SPI_GETWORKAREA, 0, &rcNewSize, 0);
208 ::MoveWindow(m_hWnd, rcNewSize.left, rcNewSize.top, rcNewSize.right - rcNewSize.left, rcNewSize.bottom - rcNewSize.top, TRUE);
209 ::MoveWindow(m_hWndShellView, 0, 0, rcNewSize.right - rcNewSize.left, rcNewSize.bottom - rcNewSize.top, TRUE);
210
211#endif
212 return S_OK;
213}
214
215HRESULT CDesktopBrowser::Initialize(IShellDesktopTray *ShellDesk)
216{
217 CComPtr<IShellFolder> psfDesktop;
218 HRESULT hRet;
219 hRet = SHGetDesktopFolder(&psfDesktop);
220 if (FAILED_UNEXPECTEDLY(hRet))
221 return hRet;
222
223 m_Tray = ShellDesk;
224
226 if (!m_hWnd)
227 return E_FAIL;
228
229 CSFV csfv = {sizeof(CSFV), psfDesktop};
231 if (FAILED_UNEXPECTEDLY(hRet))
232 return hRet;
233
234 m_Tray->RegisterDesktopWindow(m_hWnd);
235 if (FAILED_UNEXPECTEDLY(hRet))
236 return hRet;
237
238 BOOL fHideIcons = SHELL_GetSetting(SSF_HIDEICONS, fHideIcons);
240 RECT rcShellView = {0,0,0,0};
241 fs.ViewMode = FVM_ICON;
243 FWF_AUTOARRANGE | (fHideIcons ? FWF_NOICONS : 0);
244 hRet = m_ShellView->CreateViewWindow(NULL, &fs, (IShellBrowser *)this, &rcShellView, &m_hWndShellView);
245 if (FAILED_UNEXPECTEDLY(hRet))
246 return hRet;
247
248 _Resize();
249
251
253
254#if 1
255 /* A Windows8+ specific hack */
258#endif
260 UpdateWindow();
261
262 return hRet;
263}
264
266{
267 if (lphwnd == NULL)
268 return E_POINTER;
269 *lphwnd = m_hWnd;
270 return S_OK;
271}
272
274{
275 return E_NOTIMPL;
276}
277
278HRESULT STDMETHODCALLTYPE CDesktopBrowser::InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
279{
280 return E_NOTIMPL;
281}
282
283HRESULT STDMETHODCALLTYPE CDesktopBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject)
284{
285 return E_NOTIMPL;
286}
287
289{
290 return E_NOTIMPL;
291}
292
294{
295 return E_NOTIMPL;
296}
297
299{
300 return E_NOTIMPL;
301}
302
304{
305 if (!::TranslateAcceleratorW(m_hWnd, m_hAccel, lpmsg))
306 return S_FALSE;
307 return S_OK;
308}
309
311{
312 /*
313 * We should use IShellWindows interface here in order to attempt to
314 * find an open shell window that shows the requested pidl and activate it
315 */
316
317 DWORD dwFlags = ((wFlags & SBSP_EXPLOREMODE) != 0) ? SH_EXPLORER_CMDLINE_FLAG_E : 0;
318 return SHOpenNewFrame(ILClone(pidl), NULL, 0, dwFlags);
319}
320
322{
323 return E_NOTIMPL;
324}
325
327{
328 if (lphwnd == NULL)
329 return E_POINTER;
330 return E_NOTIMPL;
331}
332
334{
335 if (pret == NULL)
336 return E_POINTER;
337 return E_NOTIMPL;
338}
339
341{
342 if (ppshv == NULL)
343 return E_POINTER;
344 *ppshv = m_ShellView;
345 if (*ppshv != NULL)
346 (*ppshv)->AddRef();
347
348 return S_OK;
349}
350
352{
353 return E_NOTIMPL;
354}
355
357{
358 return E_NOTIMPL;
359}
360
362{
363 ITEMIDLIST deskpidl = {};
364 return SHGetViewStatePropertyBag(&deskpidl, L"Desktop", flags | SHGVSPB_ROAM, riid, ppv);
365}
366
368{
369 /* FIXME - handle guidService (SID_STopLevelBrowser for IShellBrowserService etc) */
370 return QueryInterface(riid, ppv);
371}
372
374{
375 HWND hWndTray;
376 HRESULT hRet;
377
378 hRet = m_Tray->GetTrayWindow(&hWndTray);
379 if (SUCCEEDED(hRet))
380 ::PostMessageW(hWndTray, uMsg, wParam, lParam);
381
382 return 0;
383}
384
386{
387 switch (LOWORD(wParam))
388 {
390 return _NotifyTray(TWM_DOEXITWINDOWS, 0, 0);
393 return _NotifyTray(TWM_CYCLEFOCUS, 1, 0xFFFFFFFF);
394 else
395 return _NotifyTray(TWM_CYCLEFOCUS, 1, 1);
398 break;
400 if (m_ShellView)
401 m_ShellView->Refresh();
402 break;
403 }
404
405 return 0;
406}
407
408
410{
411 return (LRESULT)PaintDesktop((HDC)wParam);
412}
413
415{
416 if (wParam == SIZE_MINIMIZED)
417 {
418 /* Hey, we're the desktop!!! */
419 ::ShowWindow(m_hWnd, SW_RESTORE);
420 }
421
423
424 return 0;
425}
426
428{
429 if (uMsg == WM_SETTINGCHANGE /* == WM_WININICHANGE */ &&
430 lstrcmpiW((LPCWSTR)lParam, L"Environment") == 0)
431 {
432 LPVOID lpEnvironment;
433 RegenerateUserEnvironment(&lpEnvironment, TRUE);
434 }
435
436 if (m_hWndShellView)
437 {
438 /* Forward the message */
440 }
441
442 if (uMsg == WM_SETTINGCHANGE && wParam == SPI_SETWORKAREA && m_hWndShellView != NULL)
443 {
444 _Resize();
445 }
446
447 return 0;
448}
449
451{
452 return _NotifyTray(TWM_DOEXITWINDOWS, 0, 0);
453}
454
456{
457 TRACE("Proxy Desktop message 1035 received.\n");
459 return 0;
460}
461
463{
465 return 0;
466}
467
468// Message WM_DESKTOP_GET_CNOTIFY_SERVER: Get or create the change notification server.
469// wParam: BOOL bCreate; The flag whether it creates or not.
470// lParam: Ignored.
471// return: The window handle of the server window.
473{
476 {
479 return NULL;
480
483 return NULL;
484 }
486}
487
488// Detect DBT_DEVICEARRIVAL and DBT_DEVICEREMOVECOMPLETE
490{
492 return 0;
493
494 DWORD dwDrives = ::GetLogicalDrives();
495 for (INT iDrive = 0; iDrive <= 'Z' - 'A'; ++iDrive)
496 {
498 DWORD dwBit = (1 << iDrive);
499 if (!(m_dwDrives & dwBit) && (dwDrives & dwBit)) // The drive is added
500 {
501 PathBuildRootW(szPath, iDrive);
503 }
504 else if ((m_dwDrives & dwBit) && !(dwDrives & dwBit)) // The drive is removed
505 {
506 PathBuildRootW(szPath, iDrive);
508 }
509 }
510
511 m_dwDrives = dwDrives;
512 return 0;
513}
514
516
518{
519 switch (wParam)
520 {
521 case 0:
522#if (NTDDI_VERSION >= NTDDI_VISTA)
523 case 2:
524 case 7:
525#endif
527 break;
528 case 1:
530 break;
531 }
532 return 0;
533}
534
536{
538 m_ShellView->SaveViewState();
539 return 0;
540}
541
542HRESULT CDesktopBrowser_CreateInstance(IShellDesktopTray *Tray, REFIID riid, void **ppv)
543{
544 return ShellObjectCreatorInit<CDesktopBrowser, IShellDesktopTray*>(Tray, riid, ppv);
545}
546
547/*************************************************************************
548 * SHCreateDesktop [SHELL32.200]
549 *
550 */
551HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *Tray)
552{
553 if (Tray == NULL)
554 {
556 return NULL;
557 }
558
559 CComPtr<IShellBrowser> Browser;
562 return NULL;
563
564 return static_cast<HANDLE>(Browser.Detach());
565}
566
567/*************************************************************************
568 * SHCreateDesktop [SHELL32.201]
569 *
570 */
572{
573 if (hDesktop == NULL)
574 {
576 return FALSE;
577 }
578
579 MSG Msg;
580 BOOL bRet;
581
582 CComPtr<IShellBrowser> browser;
583 CComPtr<IShellView> shellView;
584
585 browser.Attach(static_cast<IShellBrowser*>(hDesktop));
586 HRESULT hr = browser->QueryActiveShellView(&shellView);
588 return FALSE;
589
590 while ((bRet = ::GetMessageW(&Msg, NULL, 0, 0)) != 0)
591 {
592 if (bRet != -1)
593 {
594 if (shellView->TranslateAcceleratorW(&Msg) != S_OK)
595 {
598 }
599 }
600 }
601
602 return TRUE;
603}
604
605/*************************************************************************
606 * SHIsTempDisplayMode [SHELL32.724]
607 *
608 * Is the current display settings temporary?
609 */
611{
612 TRACE("\n");
613
614 if (GetSystemMetrics(SM_REMOTESESSION) || GetSystemMetrics(SM_REMOTECONTROL))
615 return FALSE;
616
617 DEVMODEW DevMode;
618 ZeroMemory(&DevMode, sizeof(DevMode));
619 DevMode.dmSize = sizeof(DevMode);
620
622 return FALSE;
623
624 if (!DevMode.dmPelsWidth || !DevMode.dmPelsHeight)
625 return FALSE;
626
627 HDC hDC = GetDC(NULL);
628 DWORD cxWidth = GetDeviceCaps(hDC, HORZRES);
629 DWORD cyHeight = GetDeviceCaps(hDC, VERTRES);
631
632 return (cxWidth != DevMode.dmPelsWidth || cyHeight != DevMode.dmPelsHeight);
633}
static HDC hDC
Definition: 3dtext.c:33
HRESULT CChangeNotifyServer_CreateInstance(REFIID riid, void **ppv)
#define WM_DESKTOP_GET_CNOTIFY_SERVER
HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV psvcbi, IShellView **ppsv)
Definition: CDefView.cpp:4614
BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop)
VOID WINAPI ShowFolderOptionsDialog(UINT Page, BOOL Async)
Definition: misc.cpp:278
EXTERN_C BOOL WINAPI SHIsTempDisplayMode(VOID)
HRESULT CDesktopBrowser_CreateInstance(IShellDesktopTray *Tray, REFIID riid, void **ppv)
static const WCHAR szProgmanClassName[]
static const WCHAR szProgmanWindowName[]
HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *Tray)
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define shell32_hInstance
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
@ Create
Definition: registry.c:563
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHOD(m)
Definition: basetyps.h:62
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
#define WM_EXPLORER_OPEN_NEW_WINDOW
#define SH_EXPLORER_CMDLINE_FLAG_E
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
STDMETHOD() RemoveMenusSB(HMENU hmenuShared) override
CComPtr< IShellView > m_ShellView
CComPtr< IOleWindow > m_ChangeNotifyServer
STDMETHOD() EnableModelessSB(BOOL fEnable) override
STDMETHOD() GetWindow(HWND *lphwnd) override
STDMETHOD() SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override
STDMETHOD() TranslateAcceleratorSB(MSG *pmsg, WORD wID) override
void SetTopBrowser() const
LRESULT OnSaveState(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() GetViewStateStream(DWORD grfMode, IStream **ppStrm) override
HRESULT Initialize(IShellDesktopTray *ShellDeskx)
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnGetChangeNotifyServer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
CComPtr< IShellDesktopTray > m_Tray
LRESULT OnOpenNewWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override
STDMETHOD() SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) override
STDMETHOD() SetStatusTextSB(LPCOLESTR pszStatusText) override
STDMETHOD() GetPropertyBag(long flags, REFIID riid, void **ppv) override
LRESULT OnShowOptionsDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
STDMETHOD() SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override
STDMETHOD() BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) override
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() OnViewWindowActive(struct IShellView *ppshv) override
LRESULT OnDeviceChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() QueryActiveShellView(struct IShellView **ppshv) override
LRESULT _NotifyTray(UINT uMsg, WPARAM wParam, LPARAM lParam)
STDMETHOD() GetControlWindow(UINT id, HWND *lphwnd) override
Definition: list.h:37
WPARAM wParam
Definition: combotst.c:138
struct @1628 Msg[]
LPARAM lParam
Definition: combotst.c:139
#define DBT_DEVICEARRIVAL
Definition: dbt.h:12
#define DBT_DEVICEREMOVECOMPLETE
Definition: dbt.h:16
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
HRESULT WINAPI SHOpenNewFrame(LPITEMIDLIST pidl, IUnknown *paramC, long param10, DWORD dwFlags)
Definition: desktopipc.cpp:591
BOOL WINAPI SHOnCWMCommandLine(HANDLE hSharedInfo)
Definition: desktopipc.cpp:537
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define FCIDM_DESKBROWSER_REFRESH
Definition: desktop.c:14
UINT uFlags
Definition: api.c:59
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4261
HRESULT WINAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl, LPWSTR bag_name, DWORD flags, REFIID riid, void **ppv)
Definition: ordinal.c:5206
LPWSTR WINAPI PathBuildRootW(LPWSTR lpszPath, int drive)
Definition: path.c:348
HWND hwndListView
Definition: eventvwr.c:66
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLbitfield flags
Definition: glext.h:7161
GLuint id
Definition: glext.h:5910
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define fs
Definition: i386-dis.c:444
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define END_COM_MAP()
Definition: atlcom.h:592
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define END_MSG_MAP()
Definition: atlwin.h:1917
#define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd)
Definition: atlwin.h:2004
LPCWSTR szPath
Definition: env.c:37
static HDC
Definition: imagelist.c:92
HRESULT hres
Definition: protocol.c:465
static HANDLE ULONG_PTR dwData
Definition: file.c:35
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
#define _In_
Definition: ms_sal.h:308
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
#define BOOL
Definition: nt_native.h:43
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
Definition: mm.h:1306
#define L(x)
Definition: ntvdm.h:50
const GUID IID_IOleWindow
#define LOWORD(l)
Definition: pedump.c:82
#define WS_POPUP
Definition: pedump.c:616
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
#define LVM_SETWORKAREAS
Definition: commctrl.h:2782
#define WC_LISTVIEW
Definition: commctrl.h:2259
#define REFIID
Definition: guiddef.h:118
#define list
Definition: rosglue.h:35
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, RECT *rcMonitor, LPARAM Param)
Definition: screensave.c:33
EXTERN_C BOOL WINAPI RegenerateUserEnvironment(LPVOID *lpEnvironment, BOOL bUpdateSelf)
Definition: shell32.cpp:71
BOOL WINAPI SHFindFiles(PCIDLIST_ABSOLUTE pidlFolder, PCIDLIST_ABSOLUTE pidlSaveFile)
Definition: shellord.c:2462
#define SHELL_GetSetting(pss, ssf, field)
Definition: shellutils.h:795
HRESULT hr
Definition: shlfolder.c:183
struct _CSFV CSFV
#define SHCNE_DRIVEREMOVED
Definition: shlobj.h:1896
_In_ int _In_ BOOL bCreate
Definition: shlobj.h:1519
#define SHCNE_DRIVEADD
Definition: shlobj.h:1897
#define SHCNF_PATHW
Definition: shlobj.h:1924
@ REST_NOSAVESET
Definition: shlobj.h:1644
#define SSF_HIDEICONS
Definition: shlobj.h:1616
@ FWF_AUTOARRANGE
Definition: shobjidl.idl:641
@ FWF_NOSCROLL
Definition: shobjidl.idl:651
@ FWF_NOCLIENTEDGE
Definition: shobjidl.idl:650
@ FWF_NOICONS
Definition: shobjidl.idl:653
@ FWF_TRANSPARENT
Definition: shobjidl.idl:649
@ FWF_DESKTOP
Definition: shobjidl.idl:646
@ FVM_ICON
Definition: shobjidl.idl:678
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:150
#define IDA_DESKBROWSER
Definition: shresdef.h:27
#define FCIDM_DESKBROWSER_FOCUS
Definition: shresdef.h:822
#define FCIDM_DESKBROWSER_SEARCH
Definition: shresdef.h:823
#define FCIDM_DESKBROWSER_CLOSE
Definition: shresdef.h:821
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define TRACE(s)
Definition: solgame.cpp:4
Definition: shlobj.h:1275
Definition: scsiwmi.h:51
DWORD dmPelsWidth
Definition: wingdi.h:1648
DWORD dmPelsHeight
Definition: wingdi.h:1649
WORD dmSize
Definition: wingdi.h:1620
Definition: ffs.h:70
DWORD cbSize
Definition: winuser.h:3784
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT
Definition: typedefs.h:58
#define TRAYCMD_TASKBAR_PROPERTIES
Definition: undocshell.h:852
#define TWM_CYCLEFOCUS
Definition: undocshell.h:55
#define TWM_DOEXITWINDOWS
Definition: undocshell.h:54
#define WM_PROGMAN_SAVESTATE
Definition: undocshell.h:61
#define WM_PROGMAN_OPENSHELLSETTINGS
Definition: undocshell.h:60
BOOL WINAPI EnumDisplaySettingsW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode)
Definition: display.c:408
#define ZeroMemory
Definition: winbase.h:1712
DWORD WINAPI GetLogicalDrives(void)
Definition: disk.c:110
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:2357
#define E_POINTER
Definition: winerror.h:2365
#define HORZRES
Definition: wingdi.h:716
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define VERTRES
Definition: wingdi.h:717
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_ERASEBKGND
Definition: winuser.h:1625
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define WM_CLOSE
Definition: winuser.h:1621
#define SM_CYVIRTUALSCREEN
Definition: winuser.h:1039
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_SIZE
Definition: winuser.h:1611
#define WM_COMMAND
Definition: winuser.h:1740
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
BOOL WINAPI PaintDesktop(_In_ HDC)
#define ENUM_REGISTRY_SETTINGS
Definition: winuser.h:180
#define WM_SETFOCUS
Definition: winuser.h:1613
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
#define SIZE_MINIMIZED
Definition: winuser.h:2506
#define CS_DBLCLKS
Definition: winuser.h:651
#define WM_DEVICECHANGE
Definition: winuser.h:1811
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1626
#define SM_CXVIRTUALSCREEN
Definition: winuser.h:1038
#define WM_SETTINGCHANGE
Definition: winuser.h:1629
HWND WINAPI FindWindowExW(_In_opt_ HWND, _In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
HWND WINAPI SetFocus(_In_opt_ HWND)
#define COLOR_DESKTOP
Definition: winuser.h:914
BOOL WINAPI UpdateWindow(_In_ HWND)
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define SW_RESTORE
Definition: winuser.h:779
#define VK_SHIFT
Definition: winuser.h:2202
#define SW_SHOW
Definition: winuser.h:775
#define SM_REMOTESESSION
Definition: winuser.h:1058
BOOL WINAPI GetMonitorInfoW(_In_ HMONITOR, _Inout_ LPMONITORINFO)
#define SM_XVIRTUALSCREEN
Definition: winuser.h:1036
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define SM_CMONITORS
Definition: winuser.h:1040
BOOL WINAPI DestroyWindow(_In_ HWND)
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define SM_YVIRTUALSCREEN
Definition: winuser.h:1037
SHORT WINAPI GetKeyState(_In_ int)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185