U盘插入后,立即读取U盘序列号时出错
--------------------编程问答-------------------- 哎 我也是这个问题呀 还没好的解决方法 同求高手 --------------------编程问答-------------------- 坐等高手来 --------------------编程问答-------------------- 这些东西都假的。只是注册表里的项。
如果只用c#而不依赖第三方的dll.没有办法做出来的。
.net根本没有提供这个功能。
就算是u盘现在也分为很多种的。现在U盘的芯片组好象就是那十来家。把各家的规范找来可能会有助于你做这个东东。
楼主用这个WMI也可以做。不过做出来的东西是不准确的。 --------------------编程问答-------------------- 啊 那怎么办呀、 --------------------编程问答-------------------- 1、可以在收到插入U盘的消息时记录下当前的Drive(可以用全局变量来记录,假设名为_currentDrive),同时开启监听线程。
2、在监听线程中透过_currentDrive.IsReady来判断新插入的U盘是否准备就绪。如果准备就绪,就读取所有的U盘列表,并在U盘列表查找_currentDrive.Name中是否存在,存在则进一步获取系列号 --------------------编程问答-------------------- 非常简单 把 USB口 全部封上 内部传输线拔掉 背部 usb 全部捣毁 --------------------编程问答-------------------- 直接 BIOS 里 屏蔽就完事了 ,搞那么复杂。
--------------------编程问答-------------------- 我也遇到过这种问题,最后解决了,你可以试试我的方法:
在检测到U盘插入事件的时候,新开启一个线程用来获取U盘序列号。
protected override void WndProc(ref Message m)
{
try
{
if (m.Msg == WM_DEVICECHANGE)
{
switch (m.WParam.ToInt32())
{
case WM_DEVICECHANGE:
break;
case DBT_DEVICEARRIVAL://U盘有插入
System.Threading.Thread myTh1 = new System.Threading.Thread(UisIn); //U盘序列号获取写在这个UisIn里。
myTh1.Start();
break;
case DBT_DEVICEREMOVECOMPLETE: //U盘卸载
System.Threading.Thread myTh2 = new System.Threading.Thread(UisOut);
myTh2.Start();
break;
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
base.WndProc(ref m);
}
--------------------编程问答-------------------- 高手如云啊,小弟学习了
补充:.NET技术 , C#