C# 如何实现u盘检测,有程序正常运行,没有程序进行提示

沧海1梦 2017-11-07 02:01:44
如题,想实现类似加密狗的功能,如果程序检测到有U盘插入,整个程序正常运行,如果没有,则程序提示请插入U盘,
C#加wpf,以下是我写的,但是msg传递有问题,请大家帮忙看看
  private void Win_Load(object sender, RoutedEventArgs e)
{
System.Windows.Interop.HwndSource hWndSource;
System.Windows.Interop.WindowInteropHelper wih = new System.Windows.Interop.WindowInteropHelper(this);
hWndSource = System.Windows.Interop.HwndSource.FromHwnd(wih.Handle);
//添加处理程序
hWndSource.AddHook(winmsg);
}

public const int WM_DEVICECHANGE = 0x219;
public const int DBT_DEVICEARRIVAL = 0x8000; //如果m.Msg的值为0x8000那么表示有U盘插入
public const int DBT_CONFIGCHANGECANCELED = 0x0019;
public const int DBT_CONFIGCHANGED = 0x0018;
public const int DBT_CUSTOMEVENT = 0x8006;
public const int DBT_DEVICEQUERYREMOVE = 0x8001;
public const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002;
public const int DBT_DEVICEREMOVECOMPLETE = 0X8004;
public const int DBT_DEVICEREMOVEPENDING = 0x8003;
public const int DBT_DEVICETYPESPECIFIC = 0x8005;
public const int DBT_DEVNODES_CHANGED = 0x0007;
public const int DBT_QUERYCHANGECONFIG = 0x0017;
public const int DBT_USERDEFINED = 0xFFFF;
private IntPtr winmsg(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{

try
{
switch (msg)
{
case WM_DEVICECHANGE:
break;
case DBT_DEVICEARRIVAL://U盘插入
string[] strDrivers = Environment.GetLogicalDrives();
break;
case DBT_CONFIGCHANGECANCELED:
break;
case DBT_CONFIGCHANGED:
break;
case DBT_CUSTOMEVENT:
break;
case DBT_DEVICEQUERYREMOVE:
break;
case DBT_DEVICEQUERYREMOVEFAILED:
break;
case DBT_DEVICEREMOVECOMPLETE: //U盘卸载
break;
case DBT_DEVICEREMOVEPENDING:
break;
case DBT_DEVNODES_CHANGED:
break;
case DBT_QUERYCHANGECONFIG:
break;
case DBT_USERDEFINED:
break;
default:
break;
}
}
catch (System.Exception ex)
{
log.Error("U盘检测:" + ex);
}
return IntPtr.Zero;
}
...全文
145 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧