//+---------------------------------------------------------------------------- // // File: ActList.h // // Module: CMDIAL32.DLL // // Synopsis: Define the two connect action list class // CAction and CActionList // // Copyright (c) 1997-1999 Microsoft Corporation // // Author: fengsun Created 11/14/97 // //+---------------------------------------------------------------------------- #include #include "cm_misc.h" #include "conact_str.h" #include "conact.h" // // Class used // class CIni; class CAction; struct _ArgsStruct; //+--------------------------------------------------------------------------- // // class CActionList // // Description: A list of CAction objects // // History: fengsun Created 11/14/97 // //---------------------------------------------------------------------------- class CActionList { public: CActionList(); ~CActionList(); BOOL Append(const CIni* piniService, LPCTSTR pszSection); void RunAutoApp(HWND hwndDlg, _ArgsStruct *pArgs); // not check return value, add as watch process BOOL RunAccordType(HWND hwndDlg, _ArgsStruct *pArgs, BOOL fStatusMsgOnFailure = TRUE, BOOL fOnError = FALSE); //No watch process, Check connection type protected: BOOL Run(HWND hwndDlg, _ArgsStruct *pArgs, BOOL fAddWatch, BOOL fStatusMsgOnFailure, BOOL fOnError); // // Since we do not have a dynamic array class, here is the simple implementation // void Add(CAction* pAction); CAction * GetAt(UINT nIndex); UINT GetSize() {return m_nNum;} CAction ** m_pActionList; // This is a list of CAction* UINT m_nNum; // number of elements in pActionList UINT m_nSize; // The memory size of the m_pActionList LPCTSTR m_pszType; // "type" of the connect action (actually, the section name) enum {GROW_BY = 10}; // the dynamic array grow }; //+--------------------------------------------------------------------------- // // class CAction // // Description: A single action object // // History: fengsun Created 11/14/97 // //---------------------------------------------------------------------------- class CAction { public: CAction(LPTSTR lpCommandLine, UINT dwFlags, LPTSTR lpDescript = NULL); ~CAction(); HANDLE RunAsExe(CShellDll* pShellDll) const; HANDLE RunAsExeFromSystem(CShellDll* pShellDll, LPTSTR pszDesktop, DWORD dwLoadType); BOOL RunAsDll(HWND hWndParent, OUT DWORD& dwReturnValue, DWORD dwLoadType) const; const TCHAR* GetDescription() const {return m_pszDescription;} const TCHAR* GetProgram() const {return m_pszProgram;} void ExpandMacros(_ArgsStruct *pArgs); BOOL IsDll() const { return m_fIsDll; } void ConvertRelativePath(const CIni *piniService); void ExpandEnvironmentStringsInCommand(); void ExpandEnvironmentStringsInParams(); BOOL IsAllowed(_ArgsStruct *pArgs, LPDWORD lpdwLoadType); BOOL RunConnectActionForCurrentConnection(_ArgsStruct *pArgs); BOOL HasUI() const { return ((m_dwFlags & NONINTERACTIVE) ? FALSE : TRUE); } protected: BOOL GetLoadDirWithAlloc(DWORD dwLoadType, LPWSTR * ppszwPath) const; void ParseCmdLine(LPTSTR pszCmdLine); void ExpandEnvironmentStrings(LPTSTR * ppsz); // // Flags for CAction // enum { ACTION_DIALUP = 0x00000001, ACTION_DIRECT = 0x00000002 }; BOOL m_fIsDll; // whether the action is a dll LPTSTR m_pszProgram; // The program name or the dll name LPTSTR m_pszParams; // The parameters of the program/dll LPTSTR m_pszFunction; // The function name of the dll LPTSTR m_pszDescription; // the description UINT m_dwFlags; // a bit ORed flag #ifdef DEBUG public: void AssertValid() const; #endif }; inline void CActionList::RunAutoApp(HWND hwndDlg, _ArgsStruct *pArgs) { Run(hwndDlg, pArgs, TRUE, FALSE, FALSE); //fAddWatch = TRUE, fStatusMsgOnFailure = FALSE } inline void CAction::ConvertRelativePath(const CIni *piniService) { // // Convert the relative path to full path // LPTSTR pszTmp = ::CmConvertRelativePath(piniService->GetFile(), m_pszProgram); CmFree(m_pszProgram); m_pszProgram = pszTmp; } inline void CAction::ExpandEnvironmentStringsInCommand() { CAction::ExpandEnvironmentStrings(&m_pszProgram); } inline void CAction::ExpandEnvironmentStringsInParams() { CAction::ExpandEnvironmentStrings(&m_pszParams); }