📄 phonelistcoct.cpp
字号:
// Contact.cpp: implementation of the CPhoneCoct class.
//
//////////////////////////////////////////////////////////////////////
#include "PhoneListCoct.h"
#include <mapix.h>
#include <mapiutil.h>
#include <mapidefs.h>
#include <mapicode.h>
#include <mapitags.h>
#include <cemapi.h>
#include <simmgr.h>
#include <pimstore.h>
#pragma warning(disable: 4006)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
COutLookBase::COutLookBase()
{
m_pDispatch = NULL;
}
COutLookBase::~COutLookBase()
{
}
//-------------------------------------------------------------------------------------
// FUNCTION :
// PURPOSE :
// PARAM :
// RETURN :
//-------------------------------------------------------------------------------------
int COutLookBase::GetRecordNum()
{
int iCount;
m_pItems->get_Count(&iCount);
return iCount;
}
BOOL COutLookBase::OpenItem(int iNo)
{
if(m_pItems == NULL)
return FALSE;
if(m_pDispatch)
{
m_pDispatch->Release();
m_pDispatch = NULL;
}
// Get data from contact
m_pItems->Item(iNo, &m_pDispatch);
//HRESULT ret = m_pItems->Remove(iNo);
if(!m_pDispatch)
return FALSE;
return TRUE;
}
BOOL COutLookBase::RemoveItem(int iNo)
{
if(m_pItems == NULL)
return FALSE;
if(m_pDispatch)
{
m_pDispatch->Release();
m_pDispatch = NULL;
}
// Get data from contact
//m_pItems->Item(iNo, &m_pDispatch);
HRESULT ret = m_pItems->Remove(iNo);
// if(!m_pDispatch)
// return FALSE;
return TRUE;
}
BOOL COutLookBase::AddItem(int iNo)
{
if(m_pItems == NULL)
return FALSE;
if(m_pDispatch)
{
m_pDispatch->Release();
m_pDispatch = NULL;
}
// Get data from contact
//m_pItems->Item(iNo, &m_pDispatch);
HRESULT ret = m_pItems->Remove(iNo);
IPOutlookApp *pOutLookApp = NULL;
ret = m_pItems->get_Application(&pOutLookApp);
//IPOutlookItem;
IDispatch* pDispatch;
//IPOutlookApp_CreateItem(pOutLookApp , 1 , &pDispatch);
pOutLookApp->CreateItem(1 , &pDispatch);
// pDispatch->lpVtbl->
//(This)->lpVtbl -> CreateItem(This,olItem,ppPOutlookItem)
//pOutLookApp->CreateItem()
// if(!m_pDispatch)
// return FALSE;
return TRUE;
}
BOOL COutLookBase::OpenItemByOid(CEOID oid)
{
if(m_pApp == NULL)
return FALSE;
if(m_pDispatch)
{
m_pDispatch->Release();
m_pDispatch = NULL;
}
// Get data from contact
m_pApp->GetItemFromOid(oid , &m_pDispatch);
if(!m_pDispatch)
return FALSE;
return TRUE;
}
BOOL COutLookBase::CloseItem()
{
if(m_pDispatch)
{
m_pDispatch->Release();
m_pDispatch = NULL;
}
return TRUE;
}
//-------------------------------------------------------------------------------------
// FUNCTION :
// PURPOSE :
// PARAM :
// RETURN :
//-------------------------------------------------------------------------------------
BOOL COutLookBase::Initialize(int olFolder)
{
if(m_bInitialize)
return FALSE;
// Initialize COM object
if(FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED)))
return FALSE;
// Get instance
if(FAILED(CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER,
IID_IPOutlookApp, (LPVOID *)&m_pApp)))
return FALSE;
// Logon contact AP
if(FAILED(m_pApp->Logon(NULL))) return FALSE;
m_pApp->GetDefaultFolder(olFolder, &m_pFolder);
m_pFolder->get_Items(&m_pItems);
m_bInitialize = TRUE;
return TRUE;
}
//-------------------------------------------------------------------------------------
// FUNCTION :
// PURPOSE :
// PARAM :
// RETURN :
//-------------------------------------------------------------------------------------
void COutLookBase::Uninitialize()
{
if(m_pDispatch)
{
m_pDispatch->Release();
m_pDispatch = NULL;
}
m_pItems->Release();
m_pFolder->Release();
m_pApp->Logoff();
m_pApp->Release();
CoUninitialize();
m_bInitialize = FALSE;
}
BOOL COutLookBase::LogonContactAP(int olFolder)
{
// Initialize COM object
if(FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED)))
return FALSE;
// Get instance
if(FAILED(CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER,
IID_IPOutlookApp, (LPVOID *)&m_pApp)))
return FALSE;
// Logon contact AP
if(FAILED(m_pApp->Logon(NULL))) return FALSE;
m_pApp->GetDefaultFolder(olFolder, &m_pFolder);
m_pFolder->get_Items(&m_pItems);
return TRUE;
}
void COutLookBase::OutLogonContactAP()
{
if(m_pDispatch){
m_pDispatch->Release();
m_pDispatch = NULL;
}
m_pItems->Release();
m_pFolder->Release();
m_pApp->Logoff();
m_pApp->Release();
CoUninitialize();
}
BOOL IsChString(TCHAR* szPhrase, int iCount)
{
for(int i=0; i<iCount; i++)
{
if(szPhrase[i]<0x4e00 || szPhrase[i]>0x9fa5)
{
return FALSE;
}
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPhoneCoct::CPhoneCoct()
{
m_pDispatch = NULL;
m_bInitialize = FALSE;
}
CPhoneCoct::~CPhoneCoct()
{
}
LONG CPhoneCoct::GetItemOid(int iItemNo)
{
LONG m_OID = 0;
m_pItems->Item(iItemNo, /*(IDispatch **)&m_pContact*/&m_pDispatch);
if(m_pDispatch/*m_pContact*/)
{
((IContact*)m_pDispatch)->get_Oid(&m_OID);
m_pDispatch/*m_pContact*/->Release();
m_pDispatch/*m_pContact*/=NULL;
}
return m_OID;
}
//-------------------------------------------------------------------------------------
// FUNCTION :
// PURPOSE :
// PARAM :
// RETURN :
//-------------------------------------------------------------------------------------
HRESULT CPhoneCoct::GetNameField(TCHAR format, TCHAR* lpData)
{
HRESULT hResult = 0;
HLOCAL hMem=LocalAlloc(LPTR, MAX_PATH*sizeof(TCHAR));
BSTR lpMem=(BSTR)hMem;
switch(format)
{
case FIRST_NAME:
hResult = ((IContact*)m_pDispatch)/*m_pContact*/->get_FirstName(&lpMem);
break;
case MIDDLE_NAME:
hResult = ((IContact*)m_pDispatch)/*m_pContact*/->get_MiddleName(&lpMem);
break;
case LAST_NAME:
hResult = ((IContact*)m_pDispatch)/*m_pContact*/->get_LastName(&lpMem);
break;
}
_tcscpy(lpData, lpMem);
LocalFree(hMem);
return hResult;
}
BOOL CPhoneCoct::GetNomalFormatName(int iNo, TCHAR* lpName)
{
m_pItems->Item(iNo, /*(IDispatch **)&m_pContact*/&m_pDispatch);
if(m_pDispatch/*m_pContact*/)
{
BSTR bstrFirstName,bstrLastName;
((IContact*)m_pDispatch)/*m_pContact*/->get_FirstName(&bstrFirstName);
((IContact*)m_pDispatch)/*m_pContact*/->get_LastName(&bstrLastName);
BOOL bHasLastName = FALSE;
BOOL bHasFirstName = FALSE;
BOOL bChineseWord = FALSE;
//if(SysStringByteLen(bstrLastName) > 0)
if(SysStringLen(bstrFirstName) > 0 && SysStringLen(bstrLastName) > 0)
{
//_tcscpy(lpName, bstrLastName);
//_tcscat(lpName, bstrFirstName);
_tcscpy(lpName, bstrFirstName);
_tcscat(lpName, L" ");
_tcscat(lpName, bstrLastName);
}
else if(SysStringLen(bstrFirstName) > 0 )
{
_tcscpy(lpName, bstrFirstName);
}
else if(SysStringLen(bstrLastName) > 0)
{
_tcscpy(lpName, bstrLastName);
}
SysFreeString(bstrLastName);
SysFreeString(bstrFirstName);
// Free contact
m_pDispatch/*m_pContact*/->Release();
m_pDispatch/*m_pContact*/=NULL;
}
if(_tcslen(lpName) == 0)
return FALSE;
return TRUE;
}
//-------------------------------------------------------------------------------------
// FUNCTION : GetName
// PURPOSE : Get Name data
// PARAM :
// RETURN :
// NOTICE : Min index is 1.
//-------------------------------------------------------------------------------------
BOOL CPhoneCoct::GetFormatName(int iNo, TCHAR* lpName)
{
// Get data from contact
//TCHAR lpName[32];
m_pItems->Item(iNo, /*(IDispatch **)&m_pContact*/&m_pDispatch);
if(m_pDispatch/*m_pContact*/)
{
BSTR bstrFirstName,bstrLastName;
((IContact*)m_pDispatch)/*m_pContact*/->get_FirstName(&bstrFirstName);
((IContact*)m_pDispatch)/*m_pContact*/->get_LastName(&bstrLastName);
//if(SysStringByteLen(bstrLastName) > 0)
if(SysStringLen(bstrLastName) > 0)
{
//if(IsChString((TCHAR*)bstrLastName,SysStringByteLen(bstrLastName) / 2))
if(IsChString((TCHAR*)bstrLastName,SysStringLen(bstrLastName)))
{
_tcscpy(lpName, bstrLastName);
}else
{
TCHAR szTemp[MAX_PATH];
TCHAR szResult[MAX_PATH];
_tcscpy(szTemp, bstrLastName);
int i,nCount,iPos = 0;
//nCount = SysStringByteLen(bstrLastName) / 2;
nCount = SysStringLen(bstrLastName);
//ZeroMemory(szResult,2*nCount+2);
ZeroMemory(szResult , MAX_PATH*sizeof(TCHAR));
//ZeroMemory(szTemp,nCount);
for (i = 0 ;i < nCount;i++)
{
//if(szTemp[i] >= 0x4e00 || szTemp[i] <= 0x9fa5 )
if(szTemp[i] >= 0x4e00 && szTemp[i] <= 0x9fa5 )
{
szResult[iPos++] = szTemp[i];
//szTemp[iPos++] = szTemp[i];
}
}
if(iPos > 0)
{//说明有中文字
if(_tcslen(lpName) == 0)
//_tcscpy(lpName, szTemp);
_tcscpy(lpName, szResult);
else
//_tcscat(lpName, szTemp);
_tcscat(lpName, szResult);
}
}
}
//if(SysStringByteLen(bstrFirstName) > 0)
if(SysStringLen(bstrFirstName) > 0)
{
//if(IsChString((TCHAR*)bstrFirstName,SysStringByteLen(bstrFirstName) / 2))
if(IsChString((TCHAR*)bstrFirstName,SysStringLen(bstrFirstName)))
{
if(_tcslen(lpName) == 0)
_tcscpy(lpName, bstrFirstName);
else
_tcscat(lpName, bstrFirstName);
}
else
{
//里面有非中文的字
//我把非中文的字filfult掉
TCHAR szTemp[MAX_PATH];
TCHAR szResult[MAX_PATH];
_tcscpy(szTemp, bstrFirstName);
int i,nCount,iPos = 0;
//nCount = SysStringByteLen(bstrFirstName) / 2;
nCount = SysStringLen(bstrFirstName);
//ZeroMemory(szTemp,nCount);
//ZeroMemory(szResult,2*nCount+2);
ZeroMemory(szResult , MAX_PATH*sizeof(TCHAR));
for (i = 0 ;i < nCount;i++)
{
//if(szTemp[i] >= 0x4e00 || szTemp[i] <= 0x9fa5 )
if(szTemp[i] >= 0x4e00 && szTemp[i] <= 0x9fa5 )
{
szResult[iPos++] = szTemp[i];
//szTemp[iPos++] = szTemp[i];
}
}
if(iPos > 0)
{//说明有中文字
if(_tcslen(lpName) == 0)
//_tcscpy(lpName, szTemp);
_tcscpy(lpName, szResult);
else
//_tcscat(lpName, szTemp);
_tcscat(lpName, szResult);
}
}
}
SysFreeString(bstrLastName);
SysFreeString(bstrFirstName);
// Free contact
m_pDispatch/*m_pContact*/->Release();
m_pDispatch/*m_pContact*/=NULL;
}
if(_tcslen(lpName) == 0)
return FALSE;
return TRUE;
}
BOOL CPhoneCoct::GetFormatName(CEOID m_Oid, TCHAR* lpName)
{
// Get data from contact
//m_pItems->Item(iNo, /*(IDispatch **)&m_pContact*/&m_pDispatch);
m_pApp->GetItemFromOid(m_Oid , &m_pDispatch);
if(m_pDispatch/*m_pContact*/)
{
BSTR bstrFirstName,bstrLastName;
((IContact*)m_pDispatch)/*m_pContact*/->get_FirstName(&bstrFirstName);
((IContact*)m_pDispatch)/*m_pContact*/->get_LastName(&bstrLastName);
//外国人姓在后,名在前
//中国人姓在前,名在后
//if(SysStringByteLen(bstrLastName) > 0)
if(SysStringLen(bstrLastName) > 0)
{
//if(IsChString((TCHAR*)bstrLastName,SysStringByteLen(bstrLastName) / 2))
if(IsChString((TCHAR*)bstrLastName,SysStringLen(bstrLastName)))
{
if(_tcslen(lpName) == 0)
_tcscpy(lpName, bstrLastName);
else
_tcscat(lpName, bstrLastName);
}else
{
//里面有非中文的字
//我把非中文的字filfult掉
TCHAR szTemp[MAX_PATH];
TCHAR szResult[MAX_PATH];
_tcscpy(szTemp, bstrLastName);
int i,nCount,iPos = 0;
//nCount = SysStringByteLen(bstrLastName) / 2;
nCount = SysStringLen(bstrLastName);
//ZeroMemory(szResult,2*nCount+2);
ZeroMemory(szResult , MAX_PATH*sizeof(TCHAR));
//ZeroMemory(szTemp,nCount);
for (i = 0 ;i < nCount;i++)
{
//if(szTemp[i] >= 0x4e00 || szTemp[i] <= 0x9fa5 )
if(szTemp[i] >= 0x4e00 && szTemp[i] <= 0x9fa5 )
{
szResult[iPos++] = szTemp[i];
//szTemp[iPos++] = szTemp[i];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -