398 lines
9.4 KiB
C
398 lines
9.4 KiB
C
|
/*
|
||
|
* ConfUtil.h
|
||
|
*
|
||
|
* CConfRoom and app level utility functions
|
||
|
*/
|
||
|
|
||
|
#ifndef _CONFUTIL_H_
|
||
|
#define _CONFUTIL_H_
|
||
|
|
||
|
#include "SDKInternal.h"
|
||
|
|
||
|
#define QUICK_LAUNCH_SUBDIR _T("\\Microsoft\\Internet Explorer\\Quick Launch")
|
||
|
void DeleteShortcut(int csidl, LPCTSTR pszSubDir);
|
||
|
|
||
|
// File Transfer
|
||
|
BOOL FTransferInProgress(VOID);
|
||
|
BOOL FEnableSendFileMenu(VOID);
|
||
|
BOOL FEnableCancelSendMenu(VOID);
|
||
|
BOOL FEnableCancelReceiveMenu(VOID);
|
||
|
|
||
|
// Options Dialog
|
||
|
#define OPTIONS_GENERAL_PAGE 0
|
||
|
#define OPTIONS_SECURITY_PAGE 1
|
||
|
#define OPTIONS_MYINFO_PAGE 2
|
||
|
#define OPTIONS_FRIENDS_PAGE 3
|
||
|
#define OPTIONS_AUDIO_PAGE 4
|
||
|
#define OPTIONS_VIDEO_PAGE 5
|
||
|
#define OPTIONS_DEFAULT_PAGE OPTIONS_GENERAL_PAGE
|
||
|
|
||
|
VOID LaunchConfCpl(HWND hwnd, int nStartPage);
|
||
|
BOOL CanLaunchConfCpl();
|
||
|
|
||
|
|
||
|
// Capabilities
|
||
|
extern BOOL FIsAudioAllowed();
|
||
|
extern BOOL FIsSendVideoAllowed();
|
||
|
extern BOOL FIsReceiveVideoAllowed();
|
||
|
|
||
|
|
||
|
// String Functions
|
||
|
BOOL FLoadString(UINT id, LPTSTR psz, UINT cb = MAX_PATH);
|
||
|
BOOL FLoadString1(UINT id, LPTSTR psz, LPVOID pv);
|
||
|
int FLoadString2(UINT id, LPTSTR psz, UINT cb = MAX_PATH);
|
||
|
LPTSTR PszLoadString(UINT id);
|
||
|
LPTSTR PszAlloc(LPCTSTR pszSrc);
|
||
|
VOID FreePsz(LPTSTR psz);
|
||
|
LPTSTR PszFromBstr(PCWSTR pwStr);
|
||
|
|
||
|
int LoadResInt(UINT id, int iDefault);
|
||
|
|
||
|
HRESULT LPTSTR_to_BSTR(BSTR *pbstr, LPCTSTR psz);
|
||
|
HRESULT BSTR_to_LPTSTR(LPTSTR *ppsz, BSTR bstr);
|
||
|
|
||
|
|
||
|
// Other
|
||
|
BOOL GetDefaultName(LPTSTR pszName, int nBufferMax);
|
||
|
|
||
|
LPCTSTR ExtractServerName(LPCTSTR pcszAddr, LPTSTR pszServer, UINT cchMax);
|
||
|
BOOL FCreateIlsName(LPTSTR pszDest, LPCTSTR pszServer, LPCTSTR pszEmail, int cchMax);
|
||
|
|
||
|
BOOL FLocalIpAddress(DWORD dwIP);
|
||
|
|
||
|
INmConference2 * GetActiveConference(void);
|
||
|
BOOL FIsConferenceActive(void);
|
||
|
|
||
|
|
||
|
// Forward declaration
|
||
|
interface ITranslateAccelerator;
|
||
|
|
||
|
VOID AddModelessDlg(HWND hwnd);
|
||
|
VOID RemoveModelessDlg(HWND hwnd);
|
||
|
VOID AddTranslateAccelerator(ITranslateAccelerator* pTrans);
|
||
|
VOID RemoveTranslateAccelerator(ITranslateAccelerator* pTrans);
|
||
|
|
||
|
BOOL FBrowseForFolder(LPTSTR pszFolder, UINT cchMax, LPCTSTR pszTitle, HWND hwndParent);
|
||
|
|
||
|
VOID DisableControl(HWND hdlg, int id);
|
||
|
|
||
|
VOID KillScrnSaver(void);
|
||
|
int DxpSz(LPCTSTR pcszName);
|
||
|
BOOL FAnsiSz(LPCTSTR psz);
|
||
|
|
||
|
extern int g_cBusyOperations;
|
||
|
VOID DecrementBusyOperations(void);
|
||
|
VOID IncrementBusyOperations(void);
|
||
|
|
||
|
|
||
|
// Useful Macros
|
||
|
#define ClearStruct(lpv) ZeroMemory((LPVOID) (lpv), sizeof(*(lpv)))
|
||
|
|
||
|
|
||
|
|
||
|
// ZONE bitmasks (depends on _rgZonesOther)
|
||
|
#define ZONE_API 0x01
|
||
|
#define ZONE_VIDEO 0x02
|
||
|
#define ZONE_WIZARD 0x04
|
||
|
#define ZONE_QOS 0x08
|
||
|
#define ZONE_REFCOUNT 0x10
|
||
|
#define ZONE_OBJECTS 0x20
|
||
|
#define ZONE_UI 0x40
|
||
|
#define ZONE_CALL 0x0080
|
||
|
|
||
|
// Zone indexes
|
||
|
#define iZONE_API 0
|
||
|
#define iZONE_VIDEO 1
|
||
|
#define iZONE_WIZARD 2
|
||
|
#define iZONE_QOS 3
|
||
|
#define iZONE_REFCOUNT 4
|
||
|
#define iZONE_OBJECTS 5
|
||
|
#define iZONE_UI 6
|
||
|
#define iZONE_CALL 7
|
||
|
|
||
|
// Debugging Macros
|
||
|
#ifdef DEBUG
|
||
|
BOOL InitDebugZones(VOID);
|
||
|
VOID DeinitDebugZones(VOID);
|
||
|
|
||
|
extern HDBGZONE ghZoneOther; // initialized in conf.cpp
|
||
|
|
||
|
// Old: requires double brackets ApiDebugMsg(("x=%d", x));
|
||
|
#define ApiDebugMsg(s) DBGMSG(ghZoneOther, iZONE_API, s)
|
||
|
#define VideoDebugMsg(s) DBGMSG(ghZoneOther, iZONE_VIDEO, s)
|
||
|
|
||
|
// General: DbgMsg(iZONE_API, "x=%d", x);
|
||
|
VOID DbgMsg(UINT iZone, PSTR pszFormat,...);
|
||
|
|
||
|
// Specific: DbgMsgApi("x=%d", x);
|
||
|
VOID DbgMsgApi(PSTR pszFormat,...);
|
||
|
VOID DbgMsgVideo(PSTR pszFormat,...);
|
||
|
VOID DbgMsgRefCount(PSTR pszFormat,...);
|
||
|
VOID DbgMsgUI(PSTR pszFormat,...);
|
||
|
VOID DbgMsgCall(PSTR pszFormat,...);
|
||
|
|
||
|
|
||
|
LPCTSTR PszWSALastError(void);
|
||
|
LPCTSTR PszLastError(void);
|
||
|
LPCTSTR PszHResult(HRESULT hr);
|
||
|
|
||
|
// Redefine the standard HR result display macro
|
||
|
#undef DBGEXIT_HR
|
||
|
#define DBGEXIT_HR(s,hr) DbgZPrintFunction("Exit " #s " (result=%s)", PszHResult(hr));
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define ApiDebugMsg(s)
|
||
|
#define VideoDebugMsg(s)
|
||
|
|
||
|
inline void WINAPI DbgMsgNop(LPCTSTR, ...) { }
|
||
|
#define DbgMsgRefCount 1 ? (void)0 : ::DbgMsgNop
|
||
|
#define DbgMsgApi 1 ? (void)0 : ::DbgMsgNop
|
||
|
#define DbgMsgVideo 1 ? (void)0 : ::DbgMsgNop
|
||
|
#define DbgMsgUI 1 ? (void)0 : ::DbgMsgNop
|
||
|
#define DbgMsgCall 1 ? (void)0 : ::DbgMsgNop
|
||
|
|
||
|
inline void WINAPI DbgMsgZoneNop(UINT, LPCTSTR, ...) { }
|
||
|
#define DbgMsg 1 ? (void) 0 : ::DbgMsgZoneNop
|
||
|
|
||
|
#endif /* DEBUG */
|
||
|
|
||
|
interface ITranslateAccelerator : public IUnknown
|
||
|
{
|
||
|
public:
|
||
|
// Copied from IOleControlSite, but I don't use grfModifiers
|
||
|
virtual HRESULT TranslateAccelerator(
|
||
|
LPMSG pMsg , //Pointer to the structure
|
||
|
DWORD grfModifiers //Flags describing the state of the keys
|
||
|
) = 0;
|
||
|
// Copied from IOleWindow
|
||
|
virtual HRESULT GetWindow(
|
||
|
HWND * phwnd //Pointer to where to return window handle
|
||
|
) = 0;
|
||
|
} ;
|
||
|
|
||
|
BOOL IsWindowActive(HWND hwnd);
|
||
|
|
||
|
class CTranslateAccel : public ITranslateAccelerator, RefCount
|
||
|
{
|
||
|
private:
|
||
|
HWND m_hwnd;
|
||
|
|
||
|
public:
|
||
|
CTranslateAccel(HWND hwnd) : m_hwnd(hwnd)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
HWND GetWindow() const { return(m_hwnd); }
|
||
|
|
||
|
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID *ppvObj)
|
||
|
{ return(E_NOTIMPL); }
|
||
|
ULONG STDMETHODCALLTYPE AddRef()
|
||
|
{ return(RefCount::AddRef()); }
|
||
|
ULONG STDMETHODCALLTYPE Release()
|
||
|
{ return(RefCount::Release()); }
|
||
|
|
||
|
HRESULT TranslateAccelerator(
|
||
|
LPMSG pMsg , //Pointer to the structure
|
||
|
DWORD grfModifiers //Flags describing the state of the keys
|
||
|
)
|
||
|
{
|
||
|
return(S_FALSE);
|
||
|
}
|
||
|
|
||
|
HRESULT GetWindow(
|
||
|
HWND * phwnd //Pointer to where to return window handle
|
||
|
)
|
||
|
{
|
||
|
*phwnd = m_hwnd;
|
||
|
return(S_OK);
|
||
|
}
|
||
|
} ;
|
||
|
|
||
|
class CTranslateAccelTable : public CTranslateAccel
|
||
|
{
|
||
|
private:
|
||
|
HACCEL m_hAccel;
|
||
|
int m_nEntries;
|
||
|
|
||
|
public:
|
||
|
CTranslateAccelTable(HWND hwnd, HACCEL hAccel) : CTranslateAccel(hwnd), m_hAccel(hAccel)
|
||
|
{
|
||
|
m_nEntries = CopyAcceleratorTable(m_hAccel, NULL, 0);
|
||
|
}
|
||
|
|
||
|
HRESULT TranslateAccelerator(
|
||
|
LPMSG pMsg , //Pointer to the structure
|
||
|
DWORD grfModifiers //Flags describing the state of the keys
|
||
|
)
|
||
|
{
|
||
|
HWND hwnd = GetWindow();
|
||
|
|
||
|
WORD cmd = 0;
|
||
|
if (!IsAccelerator(m_hAccel, m_nEntries, pMsg, &cmd) || !IsWindowActive(hwnd))
|
||
|
{
|
||
|
return(S_FALSE);
|
||
|
}
|
||
|
|
||
|
return(::TranslateAccelerator(hwnd, m_hAccel, pMsg) ? S_OK : S_FALSE);
|
||
|
}
|
||
|
} ;
|
||
|
|
||
|
// Global list of modeless dialogs (declared in conf.cpp)
|
||
|
extern CSimpleArray<ITranslateAccelerator*>* g_pDialogList;
|
||
|
extern CRITICAL_SECTION dialogListCriticalSection;
|
||
|
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Connection Point Helpers
|
||
|
|
||
|
HRESULT NmAdvise(IUnknown* pUnkCP, IUnknown* pUnk, const IID& iid, LPDWORD pdw);
|
||
|
HRESULT NmUnadvise(IUnknown* pUnkCP, const IID& iid, DWORD dw);
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// NmMkCert wrapper
|
||
|
DWORD MakeCertWrap(LPCSTR szFirstName, LPCSTR szLastName, LPCSTR szEmailName,
|
||
|
DWORD dwFlags );
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// MessageBox routines
|
||
|
|
||
|
int ConfMsgBox(HWND hwndParent, LPCTSTR pcszMsg, UINT uType=(MB_OK | MB_ICONINFORMATION));
|
||
|
VOID PostConfMsgBox(UINT uStringID);
|
||
|
VOID DisplayMsgIdsParam(int ids, LPCTSTR pcsz);
|
||
|
int DisplayMsg(LPTSTR pcsz, UINT uType);
|
||
|
VOID DisplayErrMsg(INT_PTR ids);
|
||
|
|
||
|
HWND GetMainWindow();
|
||
|
BOOL FDontShowEnabled(LPCTSTR pszKey);
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Icon utilties
|
||
|
VOID LoadIconImages(void);
|
||
|
VOID FreeIconImages(void);
|
||
|
VOID DrawIconSmall(HDC hdc, int iIcon, int x, int y);
|
||
|
|
||
|
extern HIMAGELIST g_himlIconSmall;
|
||
|
|
||
|
// Create an array that can be easily copied
|
||
|
template <class T>
|
||
|
class CCopyableArray : public CSimpleArray<T>
|
||
|
{
|
||
|
public:
|
||
|
CCopyableArray()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
CCopyableArray(const CCopyableArray<T>& rhs)
|
||
|
{
|
||
|
*this = rhs;
|
||
|
}
|
||
|
|
||
|
CCopyableArray<T>& operator=(const CCopyableArray<T>& rhs)
|
||
|
{
|
||
|
if (&rhs == this)
|
||
|
{
|
||
|
return(*this);
|
||
|
}
|
||
|
|
||
|
RemoveAll();
|
||
|
|
||
|
for (int i=0; i<rhs.GetSize(); ++i)
|
||
|
{
|
||
|
Add(rhs[i]);
|
||
|
}
|
||
|
|
||
|
return(*this);
|
||
|
}
|
||
|
} ;
|
||
|
|
||
|
HFONT GetDefaultFont(void);
|
||
|
|
||
|
// Dialog utilities
|
||
|
BOOL FEmptyDlgItem(HWND hdlg, UINT id);
|
||
|
UINT GetDlgItemTextTrimmed(HWND hdlg, int id, PTCHAR psz, int cch);
|
||
|
UINT TrimDlgItemText(HWND hdlg, UINT id);
|
||
|
|
||
|
int FmtDateTime(LPSYSTEMTIME pst, LPTSTR pszDateTime, int cchMax);
|
||
|
|
||
|
VOID CombineNames(LPTSTR pszResult, int cchResult, LPCTSTR pcszFirst, LPCTSTR pcszLast);
|
||
|
|
||
|
BOOL NMGetSpecialFolderPath(HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate);
|
||
|
|
||
|
|
||
|
//--------------------------------------------------------------------------//
|
||
|
// CDirectoryManager class. //
|
||
|
//--------------------------------------------------------------------------//
|
||
|
class CDirectoryManager
|
||
|
{
|
||
|
public: // public static methods --------------------------------//
|
||
|
|
||
|
static
|
||
|
const TCHAR * const
|
||
|
get_DomainDirectory(void);
|
||
|
|
||
|
static
|
||
|
const TCHAR * const
|
||
|
get_defaultServer(void);
|
||
|
|
||
|
static
|
||
|
void
|
||
|
set_defaultServer
|
||
|
(
|
||
|
const TCHAR * const serverName
|
||
|
);
|
||
|
|
||
|
static
|
||
|
bool
|
||
|
isWebDirectory
|
||
|
(
|
||
|
const TCHAR * const directory = NULL
|
||
|
);
|
||
|
|
||
|
static
|
||
|
const TCHAR * const
|
||
|
get_dnsName
|
||
|
(
|
||
|
const TCHAR * const name
|
||
|
);
|
||
|
|
||
|
static
|
||
|
const TCHAR * const
|
||
|
get_displayName
|
||
|
(
|
||
|
const TCHAR * const name
|
||
|
);
|
||
|
|
||
|
static
|
||
|
const TCHAR * const
|
||
|
loadDisplayName(void);
|
||
|
|
||
|
static
|
||
|
void
|
||
|
get_webDirectoryUrl(LPTSTR szWebDir, int cchmax);
|
||
|
|
||
|
static
|
||
|
const TCHAR * const
|
||
|
get_webDirectoryIls(void);
|
||
|
|
||
|
static
|
||
|
bool
|
||
|
isWebDirectoryEnabled(void);
|
||
|
|
||
|
|
||
|
private: // private static members --------------------------------//
|
||
|
|
||
|
static bool m_webEnabled;
|
||
|
static TCHAR m_ils[ MAX_PATH ];
|
||
|
static TCHAR m_displayName[ MAX_PATH ];
|
||
|
static TCHAR m_displayNameDefault[ MAX_PATH ];
|
||
|
static TCHAR m_defaultServer[ MAX_PATH ];
|
||
|
static TCHAR m_DomainDirectory[ MAX_PATH ];
|
||
|
|
||
|
}; // End of class CDirectoryManager.
|
||
|
|
||
|
//--------------------------------------------------------------------------//
|
||
|
#endif /* _CONFUTIL_H_ */
|