如何取得Floppy Drive Letter 不經由讀取容量的 方式 |
尚未結案
|
Snooze
一般會員 ![]() ![]() 發表:18 回覆:21 積分:7 註冊:2002-06-03 發送簡訊給我 |
Floppy 的磁碟代號 一般為 A 但也有可能為B 利用GetDriveType的方式會得知軟碟機型態 為 DRIVE_REMOVABLE 隨身碟 也為 DRIVE_REMOVABLE 所以 GetDriveType 無法區分那個磁碟代號為軟碟機 之後想到 讀取 DRIVE_REMOVABLE 的磁碟容量大小 如果小於2MB的磁碟機 便視做軟碟 但這樣做兩個問題 1. 每次讀取容量大小時,都會ACCESS 軟碟槽 頻率多次點,軟碟機就會一直機機機 很慘忍 2. 如果記憶卡的插槽磁碟,在不插入磁片狀況下 型態為DRIVE_REMOVABLE 容量大小為 0 ,造上面的判斷法則 容量< 2M 會造成誤判為 Floppy Disk 所以請問各位有沒有比較Smart的方式來取的軟碟機的 Drive Letter 呢?
------
Nice to meet u |
Miles
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi Snooze 您好:
參考http://delphi.about.com/cs/adptips1999/a/bltip0599_5.htm
轉貼如下, Floppy與隨身碟所抓出來的內容是不一樣的
procedure TForm1.Button1Click(Sender: TObject) ; var Drive: Char; DriveLetter: String[4]; begin for Drive := 'A' to 'Z' do begin DriveLetter := Drive ':\'; case GetDriveType(PChar(Drive ':\')) of DRIVE_REMOVABLE: Memo1.Lines.Add(DriveLetter ' Floppy Drive') ; DRIVE_FIXED: Memo1.Lines.Add(DriveLetter ' Fixed Drive') ; DRIVE_REMOTE: Memo1.Lines.Add(DriveLetter ' Network Drive') ; DRIVE_CDROM: Memo1.Lines.Add(DriveLetter ' CD-ROM Drive') ; DRIVE_RAMDISK: Memo1.Lines.Add(DriveLetter ' RAM Disk') ; end; end; end;我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2004/06/03 11:22:09
------
我不是高手, 高手是正在銀幕前微笑的人. |
Snooze
一般會員 ![]() ![]() 發表:18 回覆:21 積分:7 註冊:2002-06-03 發送簡訊給我 |
引言: Hi Snooze 您好: 參考http://delphi.about.com/cs/adptips1999/a/bltip0599_5.htm 轉貼如下, Floppy與隨身碟所抓出來的內容是不一樣的 發表人 - miles 於 2004/06/03 11:22:09我測的結果都是DRIVE_REMOVABLE 您所說的不一樣分別是哪兩種類別呢? Nice to meet u
------
Nice to meet u |
SKYSTAR
中階會員 ![]() ![]() ![]() 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
|
Miles
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
jimmy_and_you
初階會員 ![]() ![]() 發表:20 回覆:74 積分:33 註冊:2003-05-12 發送簡訊給我 |
|
Snooze
一般會員 ![]() ![]() 發表:18 回覆:21 積分:7 註冊:2002-06-03 發送簡訊給我 |
引言: 剛剛做了一下實驗 用外接式硬碟,得到的答案是 DRIVE_REMOVABLE 用外隨身碟,得到的答案是 DRIVE_FIXED 所以我自己程式在偵測軟碟的時候只偵測A: 跟 B: (外接式軟碟也會自動分配到A:或B:), 只要A: 或 B:的回傳值是DRIVE_REMOVABLE,我就判定是軟碟外接隨身碟的確有些會有DRIVE_FIXED 但大部分的型態為DRIVE_REMOVEABLE 多試幾隻隨身碟就可發現 Nice to meet u
------
Nice to meet u |
Miles
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi Snooze 您好:
參考這一篇, 小弟我還沒試過
http://www.undu.com/DN970301/00000006.htm
------
我不是高手, 高手是正在銀幕前微笑的人. |
Miles
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi Snooze 兄您好:
我試了一下, 以下的程式可以傳回指定磁碟的名稱, 這樣應該就可以判斷
Uses ShellApi; type TDriveShellInfo = record Icon : hIcon; Image : integer; DisplayName, TypeName : string end; procedure GetDriveShellInfo (Drive : Char; var Info : TDriveShellInfo); var SHFileInfo : TSHFileInfo; begin ShGetFileInfo (PChar (Drive ':\'), 0, SHFileInfo, SizeOf (TSHFileInfo), SHGFI_TYPENAME or SHGFI_DISPLAYNAME or SHGFI_SYSICONINDEX or SHGFI_ICON); with Info do begin Icon := SHFileInfo.hIcon; Image := SHFileInfo.iIcon; DisplayName := SHFileInfo.szDisplayName; TypeName := SHFileInfo.szTypeName end end; Usage procedure TForm1.Button2Click(Sender: TObject); var Info : TDriveShellInfo; begin GetDriveShellInfo('A', Info); ShowMessage(Info.DisplayName ' ' Info.TypeName); end;我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
Snooze
一般會員 ![]() ![]() 發表:18 回覆:21 積分:7 註冊:2002-06-03 發送簡訊給我 |
|
Miles
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi Snooze 兄您好:
上面的連結還有其他方法
例如
type TDriveType = (dtUnknown, dtNoDrive, dtFloppy, dtFixed, dtNetwork, dtCDROM, dtRAM, dtFloppy3, dtFloppy5); function GetDriveType (Drive : Char) : TDriveType; begin Result := TDriveType (Windows.GetDriveType(PChar(Drive ':\'))) end;我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |