c如何获取usb设备名
⑴ linux c 程序中如何获取未挂载的usb设备的信息
利用c语言调用系统命令fdisk 然后使用grep匹配结果,并将结果反馈回c,利用c判断是否有U盘挂载,检测到有在使用c调用系统函数mount 挂载U盘到指定目录下 这个方法可以尝试一下
⑵ C Shape的WndPrco如何获取当前USB盘符
我可以给您提供C#的代码,但是我觉得那样对您没有好处。
我先给您一个解决方案吧:
使用System.IO.DriveInfo类可以获取当前系统中的驱动器的信息。调用GetDrives方法获取驱动器名称然后判断DriveType枚举是否等于Removable就可以了。
然后就是自动获取盘符的问题,您可以使用Timer,但是这样会对性能有比较大的影响,比较好的一个方法是重写窗体的WndProc方法,然后截取WM_DEVICECHANGE系统消息。
简单的代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
const int WM_DEVICECHANGE = 0x0219;
public Form1()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_DEVICECHANGE)
{
MessageBox.Show("Got it!");
}
base.WndProc(ref m);
}
}
}
您需要首先声明Windows消息的消息ID,然后重写WndProc方法来进行判断。
很抱歉对于将PID转化为盘符的方法,我现在没有很好的方法。
⑶ 怎么获取USB的设备号
ifdata.cbSize = sizeof(ifdata);
// 枚举符合该GUID的设备接口
bResult = ::SetupDiEnumDeviceInterfaces(
hDevInfoSet, // 设备信息集句柄
NULL, // 不需额外的设备描述
(LPGUID)&HARDDISK_GUID,//GUID_CLASS_USB_DEVICE, // GUID
(ULONG)nCount, // 设备信息集里的设备序号
&ifdata); // 设备接口信息
if (bResult)
{
ULONG predictedLength = 0;
ULONG requiredLength = 0;
// 取得该设备接口的细节(设备路径)
bResult = (
hDevInfoSet, // 设备信息集句柄
&ifdata, // 设备接口信息
NULL, // 设备接口细节(设备路径)
0, // 输出缓冲区大小
&requiredLength, // 不需计算输出缓冲区大小(直接用设定值)
NULL); // 不需额外的设备描述
// 取得该设备接口的细节(设备路径)
predictedLength=requiredLength;
// if(pDetail)
// {
// pDetail =NULL;
// }
pDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, predictedLength);
pDetail- >cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
bResult = (
hDevInfoSet, // 设备信息集句柄
&ifdata, // 设备接口信息
pDetail, // 设备接口细节(设备路径)
predictedLength, // 输出缓冲区大小
&requiredLength, // 不需计算输出缓冲区大小(直接用设定值)
NULL); // 不需额外的设备描述
if (bResult)
{
// 复制设备路径到输出缓冲区
for(int i=0;i <17;i++){
ch[i]=*(pDetail- >DevicePath+8+i);
}
ch[17]= "/0 ";
if (strcmp(ch,"vid_11dd&pid_0101")==0 ¦ ¦
strcmp(ch,"vid_11dd&pid_11dd")==0 ¦ ¦
strcmp(ch,"vid_0101&pid_0101")==0 ¦ ¦
strcmp(ch,"vid_0101&pid_11dd")==0) //比较版本号,防止意外出错
{
len = strlen(pDetail- >DevicePath);
devicename = new char[len];
memset(devicename, 0, len);
for(int i=0;i <(len-38);i++)
{
ch[i]=*(pDetail- >DevicePath+i);
}
ch[len-38]= "/0 ";
memset(volume, 0, MAX_PATH);
}
}
}
nCount++;
}
// 释放设备接口数据空间
::GlobalFree(pDetail);
// 关闭设备信息集句柄
::SetupDiDestroyDeviceInfoList(hDevInfoSet);
}
⑷ C++程序中,怎么获取连接到usb上的设备的句柄
得区分通信协议来进行操作
如果是USB协议(有驱)那么通过驱动安装包中专的INI文件得到设备属GUID,调用SETUPAPI.DLL的SetupDiEnumDeviceInterfaces SetupDiGetClassDevsa SetupDiDestroyDeviceInfoList 几个API来枚举出USB设备路径,然后用CreateFile来得到设备句柄
如果是HID协议(无驱)因为所有的HID设备GUID是一样的,那么在同上步骤得到句柄后再调用HID.DLL的HidD_GetAttributes来得到PID和VID来确定是否是自己需要连接的设备。
⑸ 如何使用C语言编程读取从电脑usb接口的信息。
可以打开接口上的设备,或者打开USB控制器,那涉及到windows的驱动访问。
一般访问设备使用CreateFile打开设备,然后使用ReadFile/WriteFile读写设备。
比如:
HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...); //指定以异步方式打开
BYTE bBuffer[100];
OVERLAPPED o = { 0 };
o.Offset = 345;
BOOL bReadDone = ReadFile(hFile, bBuffer, 100, NULL, &o); // bReadDone 指定I/O请求是不是以同步方式打开
DWORD dwError = GetLastError();
if (!bReadDone && (dwError == ERROR_IO_PENDING)) { //异步方式打开
// The I/O is being performed asynchronously; wait for it to complete
WaitForSingleObject(hFile, INFINITE);
bReadDone = TRUE;
}
if (bReadDone) {
// o.Internal contains the I/O error
// o.InternalHigh contains the number of bytes transferred
// bBuffer contains the read data
} else {
// An error occurred; see dwError
}
⑹ vc获得usb设备名称
如果是动态监测,即监测U盘插入可以通过监听WM_DEVICECHANGE消息来实现,并从WM_DEVICECHANGE消息的lParam里获取盘符。内
如果是静态检容测,即U盘已经插入,可以通过WinAPI GetDriveType 获得驱动器类型。用一个循环判断所有当前驱动器(结合GetLogicalDriveStrings),如果类型为DRIVE_REMOVABLE,则该驱动器为U盘。
具体代码例子网上都可以搜索到的,google一下吧,祝你成功。
⑺ 如何得到USB设备对应的盘符
【问题描述】:抄移动硬盘袭不显示【原因分析】:1. 供电不足会导致移动设备无法正常识别2. 电脑设置问题3. 主板的驱动程序及USB驱动程序异常4. 移动硬盘故障【简易步骤】:【我的电脑】—右键【管理】—【磁盘管理】—【移动硬盘】—右键【更改驱动器和路径】—向下的【小三角】—随意分配一个字母—【确定】【解决方案:】:方案一:更换usb接口。如果是台式机可以尝试插入到机箱的后面板,(有时候供电不足会导致移动设备无法正常识别)方案二:电脑设置问题1. 【我的电脑】右键点击【管理】—【磁盘管理】(如图1)图12. 找到移动硬盘,如果上面没有盘符可以手动添加一个盘符。在【移动硬盘】上单击右键—【更改驱动器和路径】(如图2)图23. 点击【更改】,点击【向下的小三角】,随意分配一个字母即可。点击【确定】(如图3)图3方案三:使用随机光盘重装一下主板的驱动程序及USB驱动程序。方案四:移动硬盘故障,建议移动硬盘售后检修
⑻ C#怎么获取已知USB设备驱动信息
usingSystem.Management;//在项目==》添加引用
classProgram
{
staticvoidMain(string[]args)
{
varusbDevices=GetUSBDevices();
foreach(varusbDeviceinusbDevices)
{
Console.WriteLine("DeviceID:{0},PNPDeviceID:{1},Description:{2} ",
usbDevice.DeviceID,usbDevice.PnpDeviceID,usbDevice.Description);
}
}
staticList<USBDeviceInfo>GetUSBDevices()
{
List<USBDeviceInfo>devices=newList<USBDeviceInfo>();
;
using(varsearcher=newManagementObjectSearcher(@"Select*FromWin32_USBHub"))
collection=searcher.Get();
foreach(vardeviceincollection)
{
devices.Add(newUSBDeviceInfo(
(string)device.GetPropertyValue("DeviceID"),
(string)device.GetPropertyValue("PNPDeviceID"),
(string)device.GetPropertyValue("Description")
));
}
collection.Dispose();
returndevices;
}
}
classUSBDeviceInfo
{
publicUSBDeviceInfo(stringdeviceID,stringpnpDeviceID,stringdescription)
{
this.DeviceID=deviceID;
this.PnpDeviceID=pnpDeviceID;
this.Description=description;
}
publicstringDeviceID{get;privateset;}
publicstringPnpDeviceID{get;privateset;}
publicstringDescription{get;privateset;}
}
⑼ 如何在linux下在应用层得到USB设备名称信息
先获取一下/dev的列表, 然后得到插播事件后, 在获取一下当前的/dev列表,然回后做一下比较答 linux系统会自动识别USB接口为串口磁盘sda(通常为sda1,可通过fdisk -l命令查询),挂载就可用。
