首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

台式机上获取windwos mobile5中的联系人,包括sim卡上的,用MFC开发同步软件解决方案

2012-03-19 
台式机上获取windwos mobile5中的联系人,包括sim卡上的,用MFC开发同步软件现在准备用MFC开发一个桌面软件,

台式机上获取windwos mobile5中的联系人,包括sim卡上的,用MFC开发同步软件
现在准备用MFC开发一个桌面软件,软件的作用是同步手机上数据,虽然Activesync能同步,但是我们想做个更方便的软件,让用户在计算机上通过该软件方面的操作手机上的数据,包括联系人,短信,文件等。但是现在遇到的问题是无法获取联系人和短信
我是新手,希望有这方面的经验的大侠们,帮帮忙,最好有现成的代码,因为项目很急~谢谢了
邮箱:babycc1988@163.com

谢谢~~

[解决办法]
用IPOutlookApp可以取得OutLook联系人,sim联系人还得用系统的sim操作函数来取
最后通过rapi来调用dll的接口实现pc端获取mobile的数据
HRESULT hRes = -1;
BYTE *pbyTo = 0;
DWORD cbin = 0
DWORD pdwIn = 0;
BYTE *pbyOut = 0;

hRes = CeRapiInit();

hRes = CeRapiInvoke( SYNC_DEVICE_BASE_DLL_W, L"SendEmail",cbin, pbyTo, &pdwIn, &pbyOut , NULL, 0);

if( FAILED(hRes))
{
hRes = GetLastError();
printf("调用cerapiinvoke失败\n");
return S_FALSE;
}

CeRapiUninit();
[解决办法]
bool ReadMsgInfo( IMessage *pMsg, CSMSMessageInfo& msgInfo)
{
ULONG ulValues = 0; 
assert( pMsg != NULL);
//读取短信Oid
SPropValue *pspvID = NULL;
SizedSPropTagArray(1, sptaID ) = { 1, PR_ENTRYID}; 
 
if ( FAILED( pMsg->GetProps((SPropTagArray *) &sptaID, MAPI_UNICODE, &ulValues, &pspvID)))
{
return false;
}
SBinary oid = pspvID->Value.bin;
 
if ( 0 == oid.cb)
{
return false;
}
 
msgInfo.Oid = BinToHexWStr(oid.lpb, oid.cb);

//读取短信内容
SPropValue *pspvSubject= NULL; 
SizedSPropTagArray(1, sptaSubject) = { 1, PR_SUBJECT}; 
 
if( SUCCEEDED( pMsg->GetProps((SPropTagArray *) & sptaSubject, MAPI_UNICODE, &ulValues, & pspvSubject)))
{
msgInfo.msgContent = PropValueToStr_W(*pspvSubject);
MAPIFreeBuffer( pspvSubject);
}

//读取短信发送人号码
SPropValue *pspvFromTel = NULL;
SizedSPropTagArray(1, sptaFromTel) = { 1, PR_SENDER_EMAIL_ADDRESS};

if( SUCCEEDED( pMsg->GetProps((SPropTagArray *) &sptaFromTel, MAPI_UNICODE, &ulValues, & pspvFromTel)))
{
msgInfo.sender = PropValueToStr_W(*pspvFromTel);
MAPIFreeBuffer( pspvFromTel);
}

//读取短信接收人号码
ADRLIST *pstToRows = NULL;
IMAPITable *pTableContact = NULL;

if (SUCCEEDED( pMsg->GetRecipientTable( NULL, &pTableContact)))
{
while ( !FAILED( pTableContact->QueryRows(1,0,(LPSRowSet*)&pstToRows)))
{
if( 0 == pstToRows->cEntries)
{
break;
}
for ( unsigned long n = 0; n < pstToRows->cEntries; n ++)
{
//遍历每个联系人属性
for( unsigned long i = 0; i < pstToRows ->aEntries[n].cValues ; i ++)
{
//判断如果是PR_EMAIL_ADDRESS属性,那么就找到了联系人地址
if( PR_EMAIL_ADDRESS == pstToRows ->aEntries[n].rgPropVals[i].ulPropTag )
{
//联系人地址
if ( L"" == msgInfo.recipients)
{
msgInfo.recipients = pstToRows ->aEntries[n].rgPropVals[i].Value.lpszW;
}
else
{
msgInfo.recipients += L",";
msgInfo.recipients += pstToRows ->aEntries[n].rgPropVals[i].Value.lpszW;
}
}
}

}
MAPIFreeBuffer(pstToRows);
}
pTableContact->Release();
pTableContact = NULL;
}

//读取短信时间
SPropValue *pspvTime = NULL;


SizedSPropTagArray( 1, sptaTime) = { 1, PR_MESSAGE_DELIVERY_TIME }; 
 
if( SUCCEEDED( pMsg->GetProps((SPropTagArray *) &sptaTime, MAPI_UNICODE, &ulValues, & pspvTime)))
{
if(PROP_TYPE( pspvTime) != PT_ERROR){ //等于时通常会抛出异常
//格式化时间
FILETIME ft; 
SYSTEMTIME stTime;
FileTimeToLocalFileTime(&pspvTime ->Value.ft,&ft); 
FileTimeToSystemTime(&ft,&stTime);
wchar_t timeStr[32];
wsprintf(timeStr, L"%04d-%02d-%02d %02d:%02d:%02d", stTime.wYear,stTime.wMonth,stTime.wDay,stTime.wHour,stTime.wMinute,stTime.wSecond);
msgInfo.msgTime = timeStr;
}

MAPIFreeBuffer(pspvTime);
}

return true;
}
[解决办法]
用rapi去获取手机的信息时有限的,建议你用以一种比较灵活的方式去解决,就是在手机上放置一个dll,然后用rapi中的cerapiinvoke这个万能函数去调用,这样做非常灵活,我以前做过,如果你有什么问题的话,可以问我~

热点排行