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

如何偵測光碟機的存在

尚未結案
kraen4468
初階會員


發表:66
回覆:112
積分:35
註冊:2003-12-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-16 16:15:31 IP:61.222.xxx.xxx 未訂閱
因為我的光碟機是外接的所以每次重新插把不一定會讀到 如何去偵測光碟機有沒有讀到呢 ~我還在學習狀態希望多多向您學習~
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-16 22:06:53 IP:219.68.xxx.xxx 未訂閱
kraen4468 您好..請參考以下文章
kraen4468
初階會員


發表:66
回覆:112
積分:35
註冊:2003-12-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-19 13:06:15 IP:61.222.xxx.xxx 未訂閱
geniustom大大: 我試過你po的連結,但是他的是CD片的偵測 ,而我只想單單偵測CD-ROM而已 還是謝謝你的回應 ~我還在學習狀態希望多多向您學習~
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-19 16:32:15 IP:219.68.xxx.xxx 未訂閱
kraen4468您好..答案就在連結中..我想您沒有仔細看完..    
(2)哪些是光碟機?? 可以利用這兩個 Win32 API 就可以辦到
   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/getlogicaldrivestrings.asp
   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/getdrivetype.asp
   char szDrive[1024]={0};
   UINT ui=0;
   char *szTemp=NULL;
   if(GetLogicalDriveStrings(1024, szDrive))
   {
      szTemp=szDrive;
      while(*szTemp!='\0')
      {
         ui=GetDriveType(szTemp);
         if(ui==DRIVE_CDROM)
         {
            Memo1->Lines->Add((AnsiString)szTemp " is a CDROM");
         }
         szTemp =4;
      }
   }
您只要知道某一個磁碟機代號..他是CD-ROM..那就表示他能偵測到您的外接光碟機了
kraen4468
初階會員


發表:66
回覆:112
積分:35
註冊:2003-12-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-19 18:55:03 IP:61.222.xxx.xxx 未訂閱
那篇我看過了我知道那個意思 可是我想找的不是這樣子 <<是在插把可以偵測出CD-ROM的而已會出現訊息>> 那篇只能測出有幾個CD-ROM而已 不過還是謝謝大大 ~我還在學習狀態希望多多向您學習~
poyulin
一般會員


發表:10
回覆:24
積分:6
註冊:2002-11-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-19 20:13:53 IP:61.218.xxx.xxx 未訂閱
下面程式碼應可解決你的疑問..這是我研究所的驅動程式課程老師出的簡單題目:    Main.h 程式碼如下:
//---------------------------------------------------------------------------
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include 
//---------------------------------------------------------------------------
class TFormCdChange : public TForm
{
__published:        // IDE-managed Components
    TEdit *EditEventStatus;
    TLabel *Label1;
private:        // User declarations
    void __fastcall OnDeviceChange(TMessage& Msg);    public:                // User declarations
    __fastcall TFormCdChange(TComponent* Owner);    BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,OnDeviceChange)
END_MESSAGE_MAP(TForm)    };
//---------------------------------------------------------------------------
extern PACKAGE TFormCdChange *FormCdChange;
//---------------------------------------------------------------------------
#endif 
Main.cpp 程式碼如下:
//---------------------------------------------------------------------------
#include 
#pragma hdrstop    #include "Main.h"
#include 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormCdChange *FormCdChange;
//---------------------------------------------------------------------------
char FirstDriveFromMask(ULONG unitmask)
{
    char i;
        for(i = 0; i < 26;   i){
                if (unitmask & 0x1)
            break;
                unitmask = unitmask >> 1;
        }
    return (i   'A');
}
//---------------------------------------------------------------------------
__fastcall TFormCdChange::TFormCdChange(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormCdChange::OnDeviceChange(TMessage& Msg)
{
    AnsiString strMsg;
        PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR) Msg.LParam;            switch(Msg.WParam){
        case DBT_DEVICEARRIVAL:
                if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
        {        // Logical volume
                        PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
                        if (lpdbv->dbcv_flags & DBTF_MEDIA)
            {
                strMsg.sprintf("Drive %c arrived", FirstDriveFromMask(lpdbv->dbcv_unitmask));
                // MessageDlg(strMsg, mtInformation, TMsgDlgButtons() << mbOK, 0);
                EditEventStatus->Text = strMsg;
                                return;
                        }
                }
                break;
        case DBT_DEVICEREMOVECOMPLETE:
                if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
        {        // Logical volume
                        PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
                        if (lpdbv -> dbcv_flags & DBTF_MEDIA)
            {
                strMsg.sprintf("Drive %c removed", FirstDriveFromMask(lpdbv->dbcv_unitmask));
                // MessageDlg(strMsg, mtInformation, TMsgDlgButtons() << mbOK, 0);
                EditEventStatus->Text = strMsg;
                                return;
                        }
                }
                break;
        }        TForm::Dispatch(&Msg);
}
另外請在Main Form 拉入一個 EDIT 並命名為 EditEventStatus... Good Luck !
kraen4468
初階會員


發表:66
回覆:112
積分:35
註冊:2003-12-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-20 14:50:47 IP:61.222.xxx.xxx 未訂閱
我試不能執行這三行會錯誤
EGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,OnDeviceChange)
END_MESSAGE_MAP(TForm)  
~我還在學習狀態希望多多向您學習~
poyulin
一般會員


發表:10
回覆:24
積分:6
註冊:2002-11-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-20 16:23:40 IP:61.218.xxx.xxx 未訂閱
引言: 我試不能執行這三行會錯誤
EGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,OnDeviceChange)
END_MESSAGE_MAP(TForm)  
~我還在學習狀態希望多多向您學習~
你要不要寄你的程式碼給我看看..或是出現什麼錯誤, 或是我將程式碼寄給你?
kraen4468
初階會員


發表:66
回覆:112
積分:35
註冊:2003-12-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-20 16:28:13 IP:61.222.xxx.xxx 未訂閱
那你的code可以上傳給我好嗎 謝謝 ~我還在學習狀態希望多多向您學習~
poyulin
一般會員


發表:10
回覆:24
積分:6
註冊:2002-11-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-04-20 16:54:50 IP:61.218.xxx.xxx 未訂閱
引言: 那你的code可以上傳給我好嗎 謝謝 ~我還在學習狀態希望多多向您學習~
poyulin
一般會員


發表:10
回覆:24
積分:6
註冊:2002-11-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-04-20 16:58:05 IP:61.218.xxx.xxx 未訂閱
Sorry, 我不會上傳檔案
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-04-20 17:41:40 IP:61.218.xxx.xxx 未訂閱
引言: Sorry, 我不會上傳檔案
幫您改一下: 下載:http://delphi.ktop.com.tw/loadfile.php?TOPICID=15222455&CC=340445
/*生活是一種藝術,用心生活享受生活*/
poyulin
一般會員


發表:10
回覆:24
積分:6
註冊:2002-11-25

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-04-20 17:52:39 IP:61.218.xxx.xxx 未訂閱
引言:
引言: Sorry, 我不會上傳檔案
幫您改一下: 下載:http://delphi.ktop.com.tw/loadfile.php?TOPICID=15222455&CC=340445
/*生活是一種藝術,用心生活享受生活*/
感謝版主協助..
系統時間:2024-05-05 7:56:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!