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.
 
 
 
 
 
 

108 lines
2.8 KiB

//+----------------------------------------------------------------------------
//
// 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