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