这个程序可以监控所以驱动器的变化。比如说,插入一个U盘,程序会作出一些相应的响应。拔下的时候也一样。 程序的思路相当简单,原理也相当简单。是通过系统消息来判断驱动器的变化。需要重载
void WndProc(ref Message m)。
protected override void WndProc(ref Message m)
{
string Volumes = string.Empty;
char[] Vs;
switch((int)m.WParam)
{
case 0x8000:
Vs = GetVolumes(m.LParam);
foreach(char i in Vs)
Volumes += i;
AddMsg(Volumes, "New");
Clear(Vs);
break;
case 0x8001:
case 0x8002:
case 0x8003:
case 0x8004:
Vs = GetVolumes(m.LParam);
foreach(char i in Vs)
Volumes += i;
AddMsg(Volumes, "Gone");
break;
}
base.WndProc(ref m);
}
其中消息
0x8000是插入一个驱动器的消息,
0x8001: 0x8002: 0x8003: 0x8004:是一个驱动器被拔出或者出现其它的故障导致驱动器意外被卸下的消息。然后要用到
DEV_BROADCAST_VOLUME 结构体。
[StructLayout(LayoutKind.Sequential)]
struct DEV_BROADCAST_VOLUME
{
public UInt32 dbcv_size;
public UInt32 dbcv_devicetype;
public UInt32 dbcv_reserved;
public UInt32 dbcv_unitmask;
public UInt32 dbcv_flags;
}
具体的参数含义参见MSDN
http://msdn.microsoft.com/en-us/library/aa363249(VS.85).aspx。 这个程序最后还加入了自动删除autorun.inf的功能,这样也防止了自动运行的病毒。 完整解决方案请点击
这里,
这里下载。