線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:6972
推到 Plurk!
推到 Facebook!

USB儲存裝置的磁碟機代號

尚未結案
RemycinLu
一般會員


發表:34
回覆:20
積分:10
註冊:2003-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-04 00:16:11 IP:12.163.xxx.xxx 未訂閱
延續這篇文章的問題,雖然還沒有人回應 >
dllee
站務副站長


發表:319
回覆:2516
積分:1710
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-04 08:14:42 IP:61.224.xxx.xxx 未訂閱
引言: 延續這篇文章的問題,雖然還沒有人回應 > < face="Verdana, Arial, Helvetica"> 您原來的問題我不會,而這個問題,如果是在 2K/XP 下,只要在第一次 PnP 此 USB 儲存裝置後,在連線的狀態下,開啟 「我的電腦」→右鍵選單的內容→在電腦管理中選「磁碟管理」 在磁碟管理中可以自行安排新的儲存裝罝的磁碟機代號,像是 O: X: Z: 等等都可以,設定完後,即使拔去 USB 裝置或關機再重開,日後只要同一個 USB 儲存裝置再連上, 2K/XP 會自動配給同一個磁碟機代號。 不知道您原問題的要求是什麼,如果只需要判斷同一個 USB 裝置有沒有連上,在 2K/XP 下則可以直接去試開指定磁碟機的特定檔,如果開不起來,就是沒連上,如果開起來,就是連上了。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://blog.yam.com/dllee/
roger128
一般會員


發表:26
回覆:41
積分:24
註冊:2002-08-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-04 23:19:56 IP:61.64.xxx.xxx 未訂閱
~^^~ 參考以下網址~~~~ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceddk40/html/cxconsampleusbdevicedrivers.asp    是你要的東東ㄇ~~    
RemycinLu
一般會員


發表:34
回覆:20
積分:10
註冊:2003-10-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-06 09:50:47 IP:198.29.xxx.xxx 未訂閱
感謝dllee和roger128兩位大大的回答,但很遺憾都不適用,可能是因為我表達 得不猜楚的原因,我現在有一個應用程式,在這個應用程式啟動的時候,就必須 從程式中判斷特定的USB儲存裝置是否已經存在作業系統裡面,如果存在的話, 就要取得這個USB儲存裝置的磁碟機代號,以供特殊用途使用,我已經找了很多 資料,但還是不知道要怎麼做(作業系統Windows 98,ME,NT,2000),再請各位大 大幫幫忙,感謝大家
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-06 16:03:08 IP:202.168.xxx.xxx 未訂閱
關於你的問題可以參考以下 http://delphi.ktop.com.tw/topic.php?topic_id=27077    讀取windows的裝置不外乎就是使用這個 DeviceIoControl  不管是什麼裝置應該都可以得到 我順便附上以前我為了找,一些儲存裝置所寫的程式,問我程式哪裡找的 當然就是參考上面哪篇的大作拉~~^_^ 什麼上傳範例??~~我想就不過是拉兩個元件 TButton 和 TMemo 我想你應該能自行剪貼到你需要的地方,應該可以對你有所幫助   < class="code"> //.cpp #include #pragma hdrstop #include #include #include #pragma package(smart_init) #pragma resource "*.dfm" #define INTERFACE_DETAIL_SIZE (1024) #define MAX_DEVICE 16 TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } int __fastcall TForm1::GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath) { HDEVINFO hDevInfoSet; SP_DEVICE_INTERFACE_DATA ifdata; PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail; int nCount; BOOL bResult; hDevInfoSet = ::SetupDiGetClassDevs(lpGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); if(hDevInfoSet == INVALID_HANDLE_VALUE) { return 0; } pDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, INTERFACE_DETAIL_SIZE); pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); nCount = 0; bResult = TRUE; while (bResult) { ifdata.cbSize=sizeof(ifdata); bResult = ::SetupDiEnumDeviceInterfaces( hDevInfoSet, NULL, lpGuid, (ULONG)nCount, &ifdata); if(bResult) { bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, &ifdata, pDetail, INTERFACE_DETAIL_SIZE, NULL, NULL); if(bResult) { ::strcpy(pszDevicePath[nCount], pDetail->DevicePath); Memo1->Lines->Add(pDetail->DevicePath); nCount ; } } } ::GlobalFree(pDetail); ::SetupDiDestroyDeviceInfoList(hDevInfoSet); return nCount; } void __fastcall TForm1::Button1Click(TObject *Sender) { HANDLE hDevice; String strInfo; int nDevice; int i,j; char* szDevicePath[MAX_DEVICE]; LPGUID lpGuid[] = { (LPGUID)&DiskClassGuid, (LPGUID)&CdRomClassGuid, (LPGUID)&StoragePortClassGuid, (LPGUID)&MediumChangerClassGuid }; for(i=0 ; i < MAX_DEVICE ; i ) szDevicePath[i]=new char[256]; for(i=0; i < sizeof(lpGuid) / sizeof(LPGUID) ; i ) { nDevice=GetDevicePath(lpGuid[i], szDevicePath); } for(i=0 ; i < MAX_DEVICE ; i ) delete []szDevicePath[i]; }
.h 
    int __fastcall GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath); // <<在.h 加上這行
RemycinLu
一般會員


發表:34
回覆:20
積分:10
註冊:2003-10-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-07 10:13:44 IP:198.29.xxx.xxx 未訂閱
非常感謝mkbobo大大的回答,解決了我另外一個問題 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=38327 能否麻煩mkbobo大大到那篇文章再重新發表一次,好讓我給你答題得分 可是,這個問題仍然沒有得到完全的解決 雖然現在已經可以判斷 > >
RemycinLu
一般會員


發表:34
回覆:20
積分:10
註冊:2003-10-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-07 16:20:34 IP:217.167.xxx.xxx 未訂閱
感謝mkbobo大大在這篇文章的回答,讓我又學到了新的東西 > 如果把 > 就算是回傳的 > 除了這個方法,還有其他的方法嗎?請 >
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-07 19:14:00 IP:202.168.xxx.xxx 未訂閱
我想我已經找到方法解決了 但是我這次想請你先做做功課 方法我不知道是不是最快的但是可以解決 因為有 > 感謝>比對 你就可以找到他到底是哪一個磁碟機名稱 阿功課是啥 就是我已經幫你找到可以解決的方法拉 但沒有程式碼 或許你可以將最後的結果 放上來告訴大家~~^^
RemycinLu
一般會員


發表:34
回覆:20
積分:10
註冊:2003-10-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-07 21:24:23 IP:12.163.xxx.xxx 未訂閱
感謝mkbobo大大的再次提醒,其實在我問這兩個問題之前,我已經用"USB"和 "USBSTOR"這兩個關鍵字,搜尋過HKEY_LOCAL_MACHINE下的所有機碼,因此,也 知道所有有關我的USB儲存裝置機碼會出現的地方,當然,也包括mkbobo大大所 說的那個Key,但是,我的程度真的太差了< >,一直找不到每個機碼之間的關 聯性,所以才會來發問的< >,另外,我也有發現在MSDN裡面有這兩個function 可用GetVolumeNameForVolumeMountPoint/GetVolumePathNamesForVolumeName 但是,好像都不支援Windows98,ME,另一方面是不熟,所以就沒有繼續試了,不 知道mkbobo大大所說的方法能夠同時在Windows98,ME,2000,XP都適用嗎? 希望 >
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-10-08 00:40:11 IP:61.64.xxx.xxx 未訂閱
先偵測reg的 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_HITACHI_&Prod_DK225A-21&Rev_00B0\11100E000038D92FX&0++++++++++++++++++++++++++++ HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\之下就是有usb的裝置 HardwareID 一共有數個位置要知道 我看是要自己去查比較ez 會一直說這個位置是因為上圖 資訊 的判斷 usb有霹靂碟也有抽取盒 更有cd rom 那一個才是可寫入的disk裝置 這2個圖大家應該都看過 在reg中還有屬性是虛擬裝置usb也是所以必須多個位置 加總之後判斷 否則連虛擬光碟你也判讀錯誤 ktop下有幾個硬體資訊範例 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30705 這是其中一個 自己再修正自己所要的數據 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起 發表人 - jackkcg 於 2003/10/08 00:57:46
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-10-09 01:54:50 IP:61.216.xxx.xxx 未訂閱
引言:當然,也包括mkbobo所 說的那個Key,但是,我的程度真的太差了,一直找不到每個機碼之間的關 聯性,所以才會來發問的,另外
再給你一點提示 你說的關聯性就是我說可以解決的方法 我說的哪個key 裡面有包含 邏輯磁碟機名稱 A: C: D: ... 他的後面有一串 BINARY 他的類型是 REG_BINARY 這個東西裡面是用寬字元儲存這個儲存媒體的詳細內容 就是我上面哪段程式的內容所解析出來的其中一個 所以你需要做一件事 就是比對他們 這樣就可以得到正確的磁碟機代號 這樣你了解了嗎 如果你對 TRegister 怎麼使用 不清楚 你可以搜尋一下這個網站 你會得到他使用的方法的 還有一件事 就是你說的98 ME 可不可以用 我沒有用98 me 所以沒辦法幫你做驗證 但是呢 如果98 me 上有同樣的 key(HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices ) 我想一定就是沒問題的了 因為 我使用的func 他都是支援98 及meㄉ 最後 如果你對有沒有支援感到有疑問 那是不是去試看看就知道了呢~~< > >>>這是一個好方法 在試一下 一試在試 做不成 在試一下< ><<<
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-03-13 11:19:17 IP:61.220.xxx.xxx 訂閱
下面 include 的檔案名稱不見了, 測試結果應該是
#include <setupapi.h>
#include <winioctl.h>

===================引 用 mkbobo 文 章===================
//.cpp
#include 
#pragma hdrstop
#include 
#include 
#include 
 
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
編輯記錄
pcboy 重新編輯於 2008-03-13 11:19:47, 註解 無‧
系統時間:2017-12-17 23:46:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!