|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: shellex.h
//
//--------------------------------------------------------------------------
#ifndef _SHELLEX_H_
#define _SHELLEX_H_
#include "nopin.h"
class CCscShellExt : public IShellExtInit, IContextMenu, IShellIconOverlayIdentifier { LONG m_cRef; LPDATAOBJECT m_lpdobj; // interface passed in by shell
DWORD m_dwUIStatus; TCHAR m_szLocalMachine[MAX_COMPUTERNAME_LENGTH+1]; CNoPinList m_NoPinList;
public: CCscShellExt() : m_cRef(1), m_lpdobj(NULL), m_dwUIStatus(0) { DllAddRef();
m_szLocalMachine[0] = TEXT('\0'); ULONG n = ARRAYSIZE(m_szLocalMachine); GetComputerName(m_szLocalMachine, &n); } ~CCscShellExt() { if (m_lpdobj) m_lpdobj->Release(); DllRelease(); }
static HRESULT WINAPI CreateInstance(REFIID riid, LPVOID *ppv);
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release();
// IShellExtInit method
STDMETHODIMP Initialize(LPCITEMIDLIST, LPDATAOBJECT, HKEY);
// IContextMenu methods
STDMETHODIMP QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi); STDMETHODIMP GetCommandString(UINT_PTR idCmd, UINT uFlags, UINT FAR *reserved, LPSTR pszName, UINT cchMax);
// IShellIconOverlayIdentifier methods
STDMETHODIMP IsMemberOf(LPCWSTR pwszPath, DWORD dwAttrib); STDMETHODIMP GetOverlayInfo(LPWSTR pwszIconFile, int cchMax, int * pIndex, DWORD * pdwFlags); STDMETHODIMP GetPriority(int * pIPriority);
private: STDMETHODIMP CheckOneFileStatus(LPCTSTR pszItem, DWORD dwAttr, BOOL bShareChecked, LPDWORD pdwStatus); STDMETHODIMP CheckFileStatus(LPDATAOBJECT pdobj, LPDWORD pdwStatus); STDMETHODIMP BuildFileList(LPDATAOBJECT pdobj, HWND hwndOwner, CscFilenameList * pfnl, LPBOOL pbSubDir = NULL);
HRESULT CanAllFilesBePinned(IDataObject *pdtobj); static HRESULT FolderHasSubFolders(LPCTSTR pszPath, CscFilenameList *pfnl);
static DWORD WINAPI _UnpinFilesThread(LPVOID pvData); static INT_PTR CALLBACK _ConfirmPinDlgProc(HWND, UINT, WPARAM, LPARAM); }; typedef CCscShellExt *PCSCSHELLEXT;
typedef DWORD (WINAPI* PFN_UNPINPROGRESSPROC)(LPCTSTR pszItem, LPARAM lpContext); void CscUnpinFileList(CscFilenameList*, BOOL, BOOL, LPCTSTR, PFN_UNPINPROGRESSPROC, LPARAM);
BOOL ShareIsCacheable(LPCTSTR pszUNC, BOOL bPathIsFile, LPTSTR *ppszConnectionName, PDWORD pdwShareStatus = FALSE); BOOL ShareIsConnected(LPCTSTR pszUNC); BOOL ConnectShare(LPCTSTR pszUNC, LPTSTR *ppszAccessName);
#endif // _SHELLEX_H_
|