Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+----------------------------------------------------------------------------
//
// File: shelldll.h
//
// Module: CMMON32.EXE and CMDIAL32.DLL
//
// Synopsis: Definition of CShellDll, a shell32.dll wrapper.
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Author: fengsun Created 01/12/98
//
//+----------------------------------------------------------------------------
#ifndef SHELLDLL_H
#define SHELLDLL_H
#include <windows.h>
#include <shlobj.h>
//
// the following is to circumvent the NT 5.0 windows.h
//
#ifdef WIN32_LEAN_AND_MEAN
#include <shellapi.h>
#endif
//+---------------------------------------------------------------------------
//
// class CShellDll
//
// Description: A class to dynamic load/unload shell32.dll to reduce the
// workingset under win95
//
// History: fengsun Created 1/12/98
//
//----------------------------------------------------------------------------
class CShellDll { public: CShellDll(BOOL fKeepDllLoaded = FALSE); ~CShellDll();
BOOL Load(); // can call even if loaded
void Unload(); // can call even if not loaded
BOOL IsLoaded();
// For ShellExecuteEx
BOOL ExecuteEx(LPSHELLEXECUTEINFO lpExecInfo);
// For ShellNotifyIcon
BOOL NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA pnid );
HRESULT ShellGetSpecialFolderLocation(HWND, int, LPITEMIDLIST *); BOOL ShellGetPathFromIDList(LPCITEMIDLIST, LPTSTR); HRESULT ShellGetMalloc(LPMALLOC * ppMalloc);
//
// These three types and the associated function pointers were made public
// so that they could be passed to GetUsersApplicationDataDir. Because of
// name decoration, passing the classes wrappers doesn't work.
//
typedef HRESULT (WINAPI* SHGetSpecialFolderLocationSpec)(HWND, int, LPITEMIDLIST *); typedef BOOL (WINAPI* SHGetPathFromIDListSpec)(LPCITEMIDLIST, LPTSTR); typedef HRESULT (WINAPI* SHGetMallocSpec)(LPMALLOC * ppMalloc);
SHGetSpecialFolderLocationSpec m_pfnSHGetSpecialFolderLocation; SHGetPathFromIDListSpec m_pfnSHGetPathFromIDList; SHGetMallocSpec m_pfnSHGetMalloc;
protected: typedef BOOL (WINAPI *SHELLEXECUTEEXPROC)(LPSHELLEXECUTEINFOW lpExecInfo); typedef BOOL (WINAPI *SHELL_NOTIFYICONPROC)(DWORD dwMessage, PNOTIFYICONDATAW pnid );
HINSTANCE m_hInstShell; BOOL m_KeepDllLoaded;
SHELLEXECUTEEXPROC m_fnShellExecuteEx; SHELL_NOTIFYICONPROC m_fnShell_NotifyIcon; };
inline BOOL CShellDll::ExecuteEx(LPSHELLEXECUTEINFOW lpExecInfo) { if (!Load()) { return FALSE; }
return m_fnShellExecuteEx(lpExecInfo); }
inline BOOL CShellDll::NotifyIcon(DWORD dwMessage, PNOTIFYICONDATAW pnid ) { if (!Load()) { return FALSE; }
BOOL fRet = m_fnShell_NotifyIcon(dwMessage,pnid);
return fRet; }
inline BOOL CShellDll::IsLoaded() { return m_hInstShell != NULL; }
#endif
|