全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1465
推到 Plurk!
推到 Facebook!

如何取得Floppy Drive Letter 不經由讀取容量的 方式

尚未結案
Snooze
一般會員


發表:18
回覆:21
積分:7
註冊:2002-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-03 02:57:08 IP:61.64.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-03 11:20:44 IP:61.30.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-07 01:44:01 IP:61.64.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-07 11:03:26 IP:203.73.xxx.xxx 未訂閱
給您一個方向....機碼登錄!!    我稍稍看了一下....好像是在 HKEY_LOCAL_MACHINE\Enum\FLOP 這裡放到就是軟碟的資訊....只是我不知道隨身碟是否也會記錄在此....    至於如何讀取及判斷方式...就請其它高手來幫您解答囉!!
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-08 13:51:38 IP:218.160.xxx.xxx 未訂閱
Hi Snooze您好:    DRIVE_REMOVABLE?? 裡面的範例應該不會有這個結果, 我這裡是這樣的 A:\ Floppy Drive C:\ Fixed Drive D:\ Fixed Drive E:\ CD-ROM Drive F:\ Fixed Drive 其中A是軟碟, F為抽取式隨身碟, 你的結果如何?? 我不是高手, 高手是正在銀幕前微笑的人. 發表人 -
------


我不是高手, 高手是正在銀幕前微笑的人.
jimmy_and_you
初階會員


發表:20
回覆:74
積分:33
註冊:2003-05-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-08 15:28:22 IP:202.145.xxx.xxx 未訂閱
剛剛做了一下實驗 用外接式硬碟,得到的答案是 DRIVE_REMOVABLE 用外隨身碟,得到的答案是 DRIVE_FIXED 所以我自己程式在偵測軟碟的時候只偵測A: 跟 B: (外接式軟碟也會自動分配到A:或B:), 只要A: 或 B:的回傳值是DRIVE_REMOVABLE,我就判定是軟碟
Snooze
一般會員


發表:18
回覆:21
積分:7
註冊:2002-06-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-08 18:49:21 IP:61.220.xxx.xxx 未訂閱
引言: 剛剛做了一下實驗 用外接式硬碟,得到的答案是 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-08 22:10:45 IP:218.160.xxx.xxx 未訂閱
Hi Snooze 您好: 參考這一篇, 小弟我還沒試過 http://www.undu.com/DN970301/00000006.htm 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-06-09 01:19:56 IP:61.30.xxx.xxx 未訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-20 01:24:35 IP:61.64.xxx.xxx 未訂閱
引言: Hi Snooze 兄您好: 我試了一下, 以下的程式可以傳回指定磁碟的名稱, 這樣應該就可以判斷
此種方式真的不會讀取到內容,讀出來的型態 區分的清楚 不過讀出來型態是中文的如果在檢體 或 日本與...那就不知道怎麼區分了 發表人 - snooze 於 2004/07/20 11:47:08
------
Nice to meet u
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-07-20 14:23:30 IP:220.135.xxx.xxx 未訂閱
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;
我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-04-29 13:08:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!