目前使用 usbview 例子,遍歷出usb 設備
但是不知道怎么跟盤符掛鉤
比如一個USB設備掛載到了F盤,或者他還有磁區F ,H盤等
uj5u.com熱心網友回復:
用硬體資訊不是很靠譜,如 芯片ID+廠商ID+序列號有一些是沒有序列號的
uj5u.com熱心網友回復:
搜“devcon”?僅供參考:
#include "stdafx.h"
using namespace std;
struct {
UINT type; LPCSTR name;
} DriveTypeFlags [] = {// GetDriveType回傳碼與人可讀字串對照表
{DRIVE_UNKNOWN ,"未知" },
{DRIVE_NO_ROOT_DIR ,"無效路經" },
{DRIVE_REMOVABLE ,"可移動" },
{DRIVE_FIXED ,"固定" },
{DRIVE_REMOTE ,"網路驅動器" },
{DRIVE_CDROM ,"CD-ROM" },
{DRIVE_RAMDISK ,"隨機存取磁盤"},
{0 , NULL },
};
int _tmain() {
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
cerr << _T("Fatal Error: MFC initialization failed") << endl;
return -1;
}
// 獲取邏輯驅動器字串- a:\<null>b:\<null>c:\<null>...z:\<null><null>
// 還可以用GetLogicalDrives以位圖形式代替字串形式獲取資訊
TCHAR buf[200];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
string msg = "邏輯驅動器:\n";
for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) {
LPCTSTR sDrivePath = s;
msg += sDrivePath;
msg += " ";
UINT uDriveType = GetDriveType(sDrivePath);
for (int i=0; DriveTypeFlags[i].name; i++) {
if (uDriveType == DriveTypeFlags[i].type) {
msg += DriveTypeFlags[i].name;
break;//
}
}
msg += '\n';
}
cout << msg.c_str();
return 0;
}
uj5u.com熱心網友回復:
我也用過這個,后面采取的是用哪個例子遍歷出插入的設備的,然后通過遍歷出的vpid 去匹配的注冊表但是這個辦法 好像也不是很好樣 如果多個u盤插拔 會造成一些錯誤
uj5u.com熱心網友回復:
百度搜相關關鍵字。uj5u.com熱心網友回復:
遍歷型別。。。uj5u.com熱心網友回復:
是啊,兩個一樣的設備不是就GG了
uj5u.com熱心網友回復:
這個好像不會吧 , 我用的是全資訊匹配 如 USB\VID_05E3&PID_0735&REV_5410
你要是只用vpid的話 那確實會
uj5u.com熱心網友回復:
我也用過這個,后面采取的是用哪個例子遍歷出插入的設備的,然后通過遍歷出的vpid 去匹配的注冊表
但是這個辦法 好像也不是很好樣 如果多個u盤插拔 會造成一些錯誤
是啊,兩個一樣的設備不是就GG了
這個好像不會吧 , 我用的是全資訊匹配 如 USB\VID_05E3&PID_0735&REV_5410
你要是只用vpid的話 那確實會
哦,能不能發一份例子啊
uj5u.com熱心網友回復:
哦,能不能發一份例子啊
額 今天才看到
// 遍歷盤符
void CGetBusRelationshipHandle::getRegistryDiskInfo()
{
HKEY hKey; //定義有關的hKey,在查詢結束時要關閉。
LPCTSTR path = "SYSTEM\\CurrentControlSet\\Services\\disk\\Enum";
LONG return0 = ( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, path, 0, KEY_READ, &hKey ) );
if ( return0 != ERROR_SUCCESS )
{
int err = GetLastError();
// MessageBox( "錯誤:無法打開有關的鍵!" );
cout << "錯誤:無法打開有關的鍵!" << endl;
}
TCHAR portName[ 255 ], commName[ 255 ];
DWORD dwLong, dwSize;
int i = 0;
while ( 1 )
{
dwLong = dwSize = sizeof( portName ) / sizeof( TCHAR );
if ( ::RegEnumValue( hKey, i, portName, &dwLong, NULL, NULL, ( PUCHAR )commName, &dwSize ) == ERROR_NO_MORE_ITEMS )
{
break;
}
else
{
mapDevice.insert( make_pair( strToLower(commName), portName ) );
}
i++;
}
//cout << commName << endl;
}
deviceDesc = DriverNameToDeviceDesc( driverKeyName, deviceID, strChild );
MAPDEVICE::iterator iter = mapDevice.find( strChild );
if ( iter != mapDevice.end() )
uj5u.com熱心網友回復:
USB\VID_05E3&PID_0735&REV_5410
我也用過這個,后面采取的是用哪個例子遍歷出插入的設備的,然后通過遍歷出的vpid 去匹配的注冊表
但是這個辦法 好像也不是很好樣 如果多個u盤插拔 會造成一些錯誤
是啊,兩個一樣的設備不是就GG了
這個好像不會吧 , 我用的是全資訊匹配 如 USB\VID_05E3&PID_0735&REV_5410
你要是只用vpid的話 那確實會
我想請問一下USB\VID_05E3&PID_0735 這個是個創惟什么型號的芯片
uj5u.com熱心網友回復:
for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get DeviceID /value') do (
echo %%a
uj5u.com熱心網友回復:
GetLogicalDrives +GetDriveTypeuj5u.com熱心網友回復:
USB\VID_05E3&PID_0735&REV_5410
我也用過這個,后面采取的是用哪個例子遍歷出插入的設備的,然后通過遍歷出的vpid 去匹配的注冊表
但是這個辦法 好像也不是很好樣 如果多個u盤插拔 會造成一些錯誤
是啊,兩個一樣的設備不是就GG了
這個好像不會吧 , 我用的是全資訊匹配 如 USB\VID_05E3&PID_0735&REV_5410
你要是只用vpid的話 那確實會
我想請問一下USB\VID_05E3&PID_0735 這個是個創惟什么型號的芯片
http://www.linux-usb.org/usb.ids
在這里去看嘛 vid 是買的 pid 是廠家自定義的 ,, 這個上面找不到 也就不知道怎么找了
uj5u.com熱心網友回復:
話說 樓主在整什么啊, 去年8月 整到今年8月了 還沒整出來 ???還沒結貼uj5u.com熱心網友回復:
話說 樓主在整什么啊, 去年8月 整到今年8月了 還沒整出來 ???還沒結貼
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/64046.html
標籤:硬件/系統
上一篇:求教有關qt槽函式的一個問題,我寫的槽函式為什么只能運行一次?
下一篇:求助,各位大神幫忙看看
