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

光碟機拖盤的退出與關閉方法

 
axsoft
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-16 16:04:11 IP:61.218.xxx.xxx 未訂閱
光碟機拖盤的退出與關閉方法    
void __fastcall Tfrm_main::OpenCD()
{
       char *rtnstr;
       mciSendStringA("set CDAudio door open", rtnstr, 0 ,0);
       try_icon->SetIconIndex(1);
       ifOpen = true;
       //以下加入您的程式碼
}    void __fastcall Tfrm_main::CloseCD()
{
       char *rtnstr;
       mciSendStringA("set CDAudio door closed", rtnstr, 0, 0);
       try_icon->SetIconIndex(0);
       ifOpen = false;
        
       //以下加入您的程式碼
      
}    
以上在 Win9x/Win2000 下執行無誤 聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-16 17:45:00 IP:210.71.xxx.xxx 未訂閱
axsoft 使用的是呼叫API 中的MCI類方法 我另外提供一種方法,是叫用ASPI Use_EXEC_SCSI_CMD(Select_Device_Count,0x1b,4,2,0); Use_EXEC_SCSI_CMD(Select_Device_Count,0x1b,4,3,0); TForm1::Use_EXEC_SCSI_CMD(int PA, int PATAPI_COMMAND, int PSelect_Byte, int PSelect_Byte_Code, int PGet_Data_Byte) { memset( &srbExec, 0, sizeof(SRB_ExecSCSICmd) ); srbExec.SRB_BufLen = 0; srbExec.SRB_BufPointer = 0; heventSRB = CreateEvent( NULL, TRUE, FALSE, NULL ); srbExec.SRB_Cmd = SC_EXEC_SCSI_CMD; srbExec.SRB_Flags = SRB_DIR_IN || SRB_EVENT_NOTIFY; srbExec.SRB_Target = iTarget; srbExec.SRB_SenseLen = SENSE_LEN; srbExec.SRB_CDBLen = 12; srbExec.SRB_PostProc = (LPVOID)heventSRB; srbExec.CDBByte[0] = PATAPI_COMMAND; srbExec.CDBByte[PSelect_Byte] = PSelect_Byte_Code; dwASPIStatus = pfnSendASPI32Command( (LPSRB)&srbExec ); }
axsoft
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-16 17:51:53 IP:61.218.xxx.xxx 未訂閱
To turboted:    您的 ASPI專文準備了如何?何時可發表?我們還在期待喔!    對了ASPI偵測光碟如何使用?(如光碟進片否?/光碟材質/製造廠...), 另一個就是光碟機的機器能力資訊如何偵測?...:)        聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2002/08/16 18:01:03
Eigen
初階會員


發表:19
回覆:36
積分:26
註冊:2002-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-06 08:32:08 IP:61.218.xxx.xxx 未訂閱
我是個初學者,就算是很簡單的程式,要讓他會動也得弄很久 我將我操作的程式寫下:    一、裏頭很多的變數,可以不要,我根本弄不清楚是用來做什麼的    二、mciSendStringA 使用到 winmm.dll,需要 include  mmsystem.h進來    #include  void __fastcall Tfrm_main::OpenCD(){ [!] mciSendStringA("set CDAudio door open", NULL, 0 ,0); } void __fastcall Tfrm_main::CloseCD(){ [!] mciSendStringA("set CDAudio door closed", NULL, 0, 0); }
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-06 10:27:00 IP:61.30.xxx.xxx 未訂閱
其實用MCI 寫CDROM的動作程式並沒這麼難,只是,功能有限 就您說的mciSendStringA ,其實你可以去看看他的原型 在msdn上面可查.. 一共有四個參數,分別是 ByVal lpstrCommand As String String控制命令 可用的String 列表 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/mmcmdstr_4nub.asp ByVal lpstrReturnString As String String回傳值 ByVal uReturnLength As Long Long回傳長度 ByVal hwndCallback As Long Handle to a callback window if the "notify" flag was specified in the command string 附帶這裏有MCI的爸爸 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/mci_7vvt.asp 再來關於我的ASPI..HMM..目前可愛的小旻正忙著和DMA&PIO MODE For Dos 努力,所以,還要再給他等那麻『一下下』...
axsoft
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-07 11:58:22 IP:163.31.xxx.xxx 未訂閱
引言: 我是個初學者,就算是很簡單的程式,要讓他會動也得弄很久 我將我操作的程式寫下: 一、裏頭很多的變數,可以不要,我根本弄不清楚是用來做什麼的 二、mciSendStringA 使用到 winmm.dll,需要 include mmsystem.h進來 #include void __fastcall Tfrm_main::OpenCD(){ [!] mciSendStringA("set CDAudio door open", NULL, 0 ,0); } void __fastcall Tfrm_main::CloseCD(){ [!] mciSendStringA("set CDAudio door closed", NULL, 0, 0); }
Eigen 您好: 試試這個範例,這是Alcohol 120% Software 燒錄軟體作者:蕭永哲先生寫的範例
/////////////////////////////////////////////////////////////////////////////
////
////   MCI DeviceCD Implement Section
////
/////////////////////////////////////////////////////////////////////////////
CMCIDevice::CMCIDevice()
{
    wDeviceID = NULL;
    hMainWnd = NULL;
}
//---------------------------------------------------------------------------
CMCIDevice::~CMCIDevice() {}
//---------------------------------------------------------------------------
/*
DWORD CMCIDevice::Open(LPCSTR lpstrName, bool bShareable)
{
        DWORD dwReturn;
        MCI_OPEN_PARMS mciOpenParms;
        mciOpenParms.lpstrDeviceType = lpstrName;
        DWORD dwFlags = MCI_OPEN_TYPE|MCI_WAIT;
        if (bShareable)
        dwFlags |= MCI_OPEN_SHAREABLE;
        dwReturn = SendCommand(MCI_OPEN, dwFlags, (DWORD)(LPVOID) &mciOpenParms);
        if (dwReturn == 0)
                wDeviceID = mciOpenParms.wDeviceID;
        return dwReturn;
}
*/
//---------------------------------------------------------------------------
DWORD CMCIDevice::Open(DWORD dwDeviceType, bool bShareable)
{
        DWORD dwReturn;
        MCI_OPEN_PARMS mciOpenParms;
        mciOpenParms.lpstrDeviceType = (LPCSTR) dwDeviceType;
        DWORD dwFlags = MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_WAIT;
        if (bShareable)
        dwFlags |= MCI_OPEN_SHAREABLE;
        dwReturn = SendCommand(MCI_OPEN, dwFlags,(DWORD)(LPVOID) &mciOpenParms);
        if (dwReturn == 0)
                wDeviceID = mciOpenParms.wDeviceID;
        return dwReturn;
}
//---------------------------------------------------------------------------
DWORD CMCIDevice::Open(DWORD dwDeviceType,LPCSTR lpstrElementName , bool bShareable)
{
        DWORD dwReturn;
        MCI_OPEN_PARMS mciOpenParms;
        mciOpenParms.lpstrDeviceType = (LPCSTR) dwDeviceType;
    mciOpenParms.lpstrElementName = lpstrElementName;
        DWORD dwFlags = MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_OPEN_ELEMENT|MCI_WAIT;
        if (bShareable)
        dwFlags |= MCI_OPEN_SHAREABLE;
        dwReturn = SendCommand(MCI_OPEN, dwFlags,(DWORD)(LPVOID) &mciOpenParms);
        if (dwReturn == 0)
                wDeviceID = mciOpenParms.wDeviceID;
        return dwReturn;
}
//---------------------------------------------------------------------------
DWORD CMCIDevice::Close()
{
    DWORD dwReturn;
    MCI_GENERIC_PARMS mciGenericParms;
    mciGenericParms.dwCallback = (DWORD) hMainWnd;
    dwReturn = SendCommand(MCI_CLOSE,0,(DWORD) &mciGenericParms);
    return dwReturn;
}
//---------------------------------------------------------------------------
DWORD CMCIDevice::SendCommand(UINT uMsg, DWORD fdwCommand, DWORD dwParam)
{
    DWORD dwReturn;
    dwReturn = mciSendCommand(wDeviceID, uMsg, fdwCommand, dwParam);
    return dwReturn;
}
//---------------------------------------------------------------------------
DWORD CMCIDevice::GetMode()
{
    DWORD dwReturn;
    dwReturn = GetStatus(MCI_STATUS_MODE);
    return dwReturn;
}
//---------------------------------------------------------------------------
DWORD CMCIDevice::GetStatus( DWORD dwItem)
{
    MCI_STATUS_PARMS mciStatusParms;
    mciStatusParms.dwCallback = (DWORD) hMainWnd;
    mciStatusParms.dwItem = dwItem;
    mciStatusParms.dwReturn = 0;
    SendCommand (MCI_STATUS, MCI_STATUS_ITEM, (DWORD) &mciStatusParms);
    return mciStatusParms.dwReturn;
}
//---------------------------------------------------------------------------
DWORD CMCIDevice::GetInfo( DWORD dwInfo, LPSTR lpstrReturn, DWORD dwRetSize)
{
    DWORD dwReturn;
    MCI_INFO_PARMS mciInfoParms;
    mciInfoParms.dwCallback = (DWORD) hMainWnd;
    mciInfoParms.lpstrReturn = lpstrReturn;
    mciInfoParms.dwRetSize = dwRetSize;
    dwReturn = SendCommand(MCI_OPEN,dwInfo,(DWORD) &mciInfoParms);
    return dwReturn;
}
//---------------------------------------------------------------------------
MCIDEVICEID CMCIDevice::GetDeviceID() const
{
    return wDeviceID;
}
//---------------------------------------------------------------------------
HWND CMCIDevice::GetCallBackHWnd() const
{
    return hMainWnd;
}
//---------------------------------------------------------------------------
void CMCIDevice::SetCallBackWnd(HWND hWnd)
{
    hMainWnd = hWnd;
}
//---------------------------------------------------------------------------
DWORD CMCIDevice::GetDevCaps(DWORD dwDevcaps, bool bItem)
{
        MCI_GETDEVCAPS_PARMS mciCapsParms;
        mciCapsParms.dwCallback = (DWORD) hMainWnd;
    mciCapsParms.dwReturn = 0;
        if (bItem)
    {
                mciCapsParms.dwItem = dwDevcaps;
                dwDevcaps |= MCI_GETDEVCAPS_ITEM;
        }
        SendCommand(MCI_GETDEVCAPS, dwDevcaps, (DWORD) &mciCapsParms);
        return mciCapsParms.dwReturn;
}
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////
////
////   CD Audio Implement Section
////
/////////////////////////////////////////////////////////////////////////////
DWORD CCDAudio::Open(DWORD dwDeviceType, bool bShareable)
{
        return CMCIDevice::Open(MCI_DEVTYPE_CD_AUDIO,bShareable);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::Open(DWORD dwDeviceType, LPCSTR lpstrElementName, bool bShareable)
{
        return CMCIDevice::Open(MCI_DEVTYPE_CD_AUDIO,lpstrElementName,bShareable);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::SetTimeFormat(DWORD dwTimeFormat) {
        MCI_SET_PARMS mciSetParms;            mciSetParms.dwTimeFormat = dwTimeFormat;            return SendCommand(MCI_SET,
                MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &mciSetParms);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetTimeFormat()
{
        return GetStatus(MCI_STATUS_TIME_FORMAT);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::PlayTrack(int nTrack, bool bAsync)
{
        DWORD dwOldTimeFormat = GetTimeFormat();
    SetTimeFormat(MCI_FORMAT_TMSF);
        CMsf msf = GetTrackLength(nTrack);
        CTmsf msfFrom = CTmsf((BYTE)nTrack,0,0,0);
        CTmsf msfTo = CTmsf((BYTE)nTrack, msf.GetMinute(), msf.GetSecond(), msf.GetFrame());
        Play(msfFrom, msfTo, bAsync);
        return SetTimeFormat(dwOldTimeFormat);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::Play(DWORD dwFrom, DWORD dwTo, bool bAsync)
{
        MCI_PLAY_PARMS mciPlayParms;
    mciPlayParms.dwFrom = dwFrom;
        mciPlayParms.dwTo = dwTo;            DWORD dwFlags = MCI_FROM | MCI_TO;
        if (bAsync)
    {
                mciPlayParms.dwCallback = (DWORD) hMainWnd;
                dwFlags |= MCI_NOTIFY;
        }            return SendCommand(MCI_PLAY, dwFlags, (DWORD)(LPVOID) &mciPlayParms);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::Stop()
{
        MCI_GENERIC_PARMS mciGenericParms;
        mciGenericParms.dwCallback = (DWORD) hMainWnd;
        return SendCommand(MCI_STOP, 0, (DWORD) &mciGenericParms);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::Pause()
{
        MCI_GENERIC_PARMS mciGenericParms;
        mciGenericParms.dwCallback = (DWORD) hMainWnd;
        return SendCommand(MCI_PAUSE, 0, (DWORD) &mciGenericParms);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::OpenDoor(bool bOpen)
{
        if (bOpen)
                return Set(MCI_SET_DOOR_OPEN);
        else
                return Set(MCI_SET_DOOR_CLOSED);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetTrackPos(DWORD dwTrack)
{
        return GetTrackInfo(dwTrack, MCI_STATUS_POSITION);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetTrackType(DWORD dwTrack)
{
        return GetTrackInfo(dwTrack, MCI_CDA_STATUS_TYPE_TRACK);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetTrackLength(DWORD dwTrack)
{
        return GetTrackInfo(dwTrack, MCI_STATUS_LENGTH);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetMediaLength(DWORD dwTrack)
{
        return GetStatus(MCI_STATUS_LENGTH);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetTrackInfo(DWORD dwTrack, DWORD dwItem)
{
        MCI_STATUS_PARMS mciStatusParms;
        mciStatusParms.dwCallback = (DWORD) hMainWnd;
        mciStatusParms.dwItem = dwItem;
        mciStatusParms.dwTrack = dwTrack;
        mciStatusParms.dwReturn = 0;
        SendCommand(MCI_STATUS,
                MCI_STATUS_ITEM|MCI_TRACK, (DWORD) &mciStatusParms);            return mciStatusParms.dwReturn;
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetCurrentTrack()
{
        return GetStatus(MCI_STATUS_CURRENT_TRACK);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetCurrentPos()
{
        return GetStatus(MCI_STATUS_POSITION);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetStartPos()
{
        return GetStatus(MCI_STATUS_START);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetNumberOfTracks()
{
        return GetStatus(MCI_STATUS_NUMBER_OF_TRACKS);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::Seek(DWORD dwTo, bool bAsync)
{
        return Seek(dwTo, MCI_TO, bAsync);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::SeekToStart(bool bAsync)
{
        return Seek(0, MCI_SEEK_TO_START, bAsync);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::SeekToEnd(bool bAsync)
{
        return Seek(0, MCI_SEEK_TO_END, bAsync);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::Seek(DWORD dwTo, DWORD dwFlags, bool bAsync)
{
        MCI_SEEK_PARMS mciSeekParms;
        if (bAsync)
    {
                mciSeekParms.dwCallback = (DWORD) hMainWnd;
                dwFlags |= MCI_NOTIFY;
        }
        mciSeekParms.dwTo = dwTo;
        return SendCommand(MCI_SEEK, dwFlags, (DWORD) &mciSeekParms);
}
//---------------------------------------------------------------------------
bool CCDAudio::IsReady()
{
        return GetStatus(MCI_STATUS_READY);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::Set(DWORD dwWhat)
{
        MCI_SET_PARMS mciSetParms;
        mciSetParms.dwCallback = (DWORD) hMainWnd;
        return SendCommand(MCI_SET, dwWhat, (DWORD) &mciSetParms);
}
//---------------------------------------------------------------------------
DWORD CCDAudio::GetDevCapsItem(DWORD dwItem)
{
        MCI_GETDEVCAPS_PARMS mciCapsParms;
        mciCapsParms.dwCallback = (DWORD) hMainWnd;
        mciCapsParms.dwItem = dwItem;
        mciCapsParms.dwReturn = 0;
        SendCommand(MCI_GETDEVCAPS, MCI_GETDEVCAPS_ITEM,
                (DWORD) &mciCapsParms);            return mciCapsParms.dwReturn;
}
//---------------------------------------------------------------------------    
__________________ Best regards Martin Hsiao Email: martin@msws.idv.tw Inside Out C Builder http://insidebcb.copystar.com.tw Open Source United Bulletin http://www.linuxshop.idv.tw/bulletin 聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
系統時間:2024-04-27 11:17:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!