光碟機拖盤的退出與關閉方法 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
光碟機拖盤的退出與關閉方法
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 發送簡訊給我 |
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 發送簡訊給我 |
To turboted: 您的 ASPI專文準備了如何?何時可發表?我們還在期待喔! 對了ASPI偵測光碟如何使用?(如光碟進片否?/光碟材質/製造廠...),
另一個就是光碟機的機器能力資訊如何偵測?...:) 網路志工聯盟----Visita網站http://www.vista.org.tw
---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2002/08/16 18:01:03
|
Eigen
初階會員 發表:19 回覆:36 積分:26 註冊:2002-12-05 發送簡訊給我 |
我是個初學者,就算是很簡單的程式,要讓他會動也得弄很久
我將我操作的程式寫下: 一、裏頭很多的變數,可以不要,我根本弄不清楚是用來做什麼的 二、mciSendStringA 使用到 winmm.dll,需要 include mmsystem.h進來 #include
|
turboted
版主 發表:95 回覆:754 積分:452 註冊:2002-07-23 發送簡訊給我 |
其實用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 發送簡訊給我 |
引言: 我是個初學者,就算是很簡單的程式,要讓他會動也得弄很久 我將我操作的程式寫下: 一、裏頭很多的變數,可以不要,我根本弄不清楚是用來做什麼的 二、mciSendStringA 使用到 winmm.dll,需要 include mmsystem.h進來 #includeEigen 您好: 試試這個範例,這是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 ---[ 發問前請先找找舊文章 ]--- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |