高手必修:关于FoxMail的深入研究(2)
FmStreetAddr
HomeTel
HomeTel2
FmFax
Company
OfCountry
OfProvince
OfCity
PostCode
HomeAddress
OfHomePage
OfPosition
OfDepartment
OfficeTel
OfficeTel2
Fax
构造格式:名称 + 冒号 + 0A0D + 信息内容 + 0A0D
最后一项构造完成 要加入2个 0A0D
实例1:
从FoxMail中遍历地址簿联系人姓名和EMail信息:
bool GoAll(char *szFileNameOfInd)
char headbuf[0x41]; // 头buf
char recbuf[0xb1]; // 内容buf
FILE* pf=fopen(szFileNameOfInd,"rb");
fseek(pf,0x40,SEEK_SET); // 到项目开始
while(!feof(pf))
{
char name[0x21],email[0x41]; // 定义存储姓名和email的字符数组
for(i=0;i<0x21;i++)
name[i]='\0';
for(i=0;i<0x41;i++)
email[i]='\0';
fread(recbuf,1,0xb0,pf); // 读取一条记录
if(recbuf[0x4]==1) // 判断删除标志
{
continue;
}
if(recbuf[0x11]==1) // 判断组标志
{
continue;
}
for(i=0;i
{
if(recbuf[i+0x13]==0)
break;
name[i]=recbuf[i+0x13];
}
for(i=0;i
{
if(recbuf[i+0x34]==0)
break;
email[i]=recbuf[i+0x34];
}
//此处添加处理name(收件人名),email(收件人地址)的程序
return true;
}
实例2:
向地址簿中添加一条记录信息,没有给出全部代码。
1. 得到文件头
BOOL GetIndFileHead(char* szheadbuf) // 得到文件头部的函数
{
fseek(FoxWriter_pf_addr,0x0,SEEK_SET);
long len=0;
len=fread(szheadbuf,1,0x40,FoxWriter_pf_addr);
if(len==0)
return FALSE;
return TRUE;
}
2. 修改项目数;
int itemcount=szheadbuf[0x5];
itemcount++;
szheadbuf[0x5]=itemcount;
3. 修改项目代号
szbuf[0x0]=itemcount;
4. 创建项目名称
szbuf[0x12]=strlen(strItemName);
for(i=0;i<0x20;i++)
szbuf[i+0x13]=strItemName[i];
5. 创建项目email
szbuf[0x33]=strlen(strEmails);
for(i=0;i<0x40;i++)
szbuf[i+0x34]=strEmails[i];
6. 构造Box文件buf
(略)
7. 创建项目对Box文件指针
char* pbuf=szbuf;
pbuf++;
short* pshbuf=(short*)pbuf;
pshbuf[0x2]=point;
8. 创建项目字数值
long len=strlen(szBoxbuf)
len+=0x156;
9. 保存Ind和Box文件
(未完,将继续整理关于FoxMail发件箱收件箱信息提取的研究)