怎麼知道目前系統有幾個磁碟機? |
缺席
|
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
API有個GetLogicDrives, 傳回一個DWORD, 對應存在的磁碟代號.
但是, 我發現, 如果你的系統上有A磁碟機, 每call一次
不管你是傳統的Floppy or USB Floppy, 都會亮一次
call 5次, 就亮5次! 但是如果你用OpenFile Dialog之類的Dialog, 磁碟機A就不會亮起來
頂多是, USB插拔的話, 要多按幾下, 才會正常反應 依此推測! OS應該把系統所有的磁碟代號, 應該存在一個Buffer, 這樣就
不需要用到GetLogicDrives這個API, 那就不會讓Drive A一直亮了 但是...這個Buffer要去那裡取得呢?
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 但是...這個Buffer要去那裡取得呢?是這樣嗎?? #include "windows.h" #include "stdio.h" void main(void) { DWORD dwSize=256; char szBuf[256]={0}; DWORD dwRet=0; int i=0; dwRet=GetLogicalDriveStrings(dwSize, szBuf); for(i=0; i<(int)(dwRet/4); i ) { printf("\nDriver %d is %s", i, szBuf i*4); } } // end of main
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21471 ◆102 磁碟機a:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
NoDriveTypeAutoRun "ff 00 00 00" 先頂著 哈哈
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
似乎API都只能抓分割後的磁碟名稱,
無法聰明的知道有幾個硬碟,
以下方式聊勝於無,但不會引起軟碟亮燈or other action...
enjoy it!!! Unit1.h
class TForm1 : public TForm
{
__published: // IDE-managed Components
TListBox *ListBox1;
TStaticText *StaticText1;
TToolBar *ToolBar1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
AnsiString PrintDriveType(const char* fp_DriveRoot);
__fastcall TForm1(TComponent* Owner);
}; Unit1.cpp
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//清除ListBox1所有文字
ListBox1->Clear();
//取得邏輯磁碟包含的文字
char DriveString[111];
memset(DriveString,0,111);
::GetLogicalDriveStrings(110, DriveString);
ListBox1->Items->Add("邏輯磁碟包含的文字:" AnsiString(DriveString));
//由A:至Z:,逐一取得磁碟狀態
for(int i = 65; i < 91; i )
{
AnsiString a= String(char(i)) ":\\";
ListBox1->Items->Add(String(char(i)) ":\\" PrintDriveType(a.c_str()));
}
}
//---------------------------------------------------------------------------
//取得磁碟狀態函式
AnsiString TForm1::PrintDriveType(const char* fp_DriveRoot)
{
//取得磁碟狀態
const int result = ::GetDriveType(fp_DriveRoot); const char* Str;
//依據傳回訊息得知磁碟狀態
switch (result)
{
case 0: Str = " 無法認定!"; break;
case 1: Str = " 這個磁碟代號尚未使用。"; break;
case DRIVE_REMOVABLE : Str = " 軟碟機"; break;
case DRIVE_FIXED : Str = " 固定硬碟(fixed)"; break;
case DRIVE_REMOTE : Str = " 遠距的(network)"; break;
case DRIVE_CDROM : Str = " 光碟機"; break;
case DRIVE_RAMDISK : Str = " RAM disk"; break;
default: Str = " 未知的新設施!";
}
//傳回字串
return Str;
}
//---------------------------------------------------------------------------
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |