久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

VC在線_技術(shù)文章->>讀書筆記|免費(fèi)vc源代碼|vc編程技術(shù)文章|vc教程|編程技巧|編...

 智豆龍 2008-04-14
如何用VC++控制多光驅(qū)
原 作 者:不祥
原 出 處:不祥
發(fā) 布 者:huangqd11
發(fā)布類型:轉(zhuǎn)載
發(fā)布日期:2008-03-27
今日/總瀏覽:2/131

導(dǎo)讀:
  對于初學(xué)者,編寫CD播放器不妨為一種入門的捷徑。CD播放器的核心在于MCI命令,,而在各種媒體上介紹MCI命令如何使用的文章比比皆是,因此我暫且對其略過不談,。在這兒,,我著重向大家介紹一個比較重要的技術(shù)--多光驅(qū)的支持。
  人們的機(jī)器上的光驅(qū)往往不止一個,,有普通的CDROM,、有CDR、有DVD,,還有窮人使用的虛擬光驅(qū):)。這樣一來,,對于編寫多媒體軟件的程序員就出了個難題:如何能在軟件中加入多光驅(qū)的支持,。要解決這個問題,首先要學(xué)會兩個API函數(shù),,其目的是獲得目標(biāo)電腦的光驅(qū)數(shù),。
  GetLogicalDrives()
  該函數(shù)功能是返回一個代表當(dāng)前變量磁盤驅(qū)動器的位掩碼;
  該函數(shù)原型為:DWORD GetLogicalDrives(VOID),;
  該函數(shù)如果調(diào)用成功,,返回值為一個代表當(dāng)前變量磁盤驅(qū)動器的位屏蔽掩碼,位的位置0為驅(qū)動器A,,1為驅(qū)動器B,,2為驅(qū)動器C等。如果函數(shù)調(diào)用失敗,,返回值為0,。
  舉例:如果某臺電腦上驅(qū)動器為A、C,、D,、E,則函數(shù)調(diào)用成功后的返回值是00011101,,其中最低位代表驅(qū)動器A,,由A存在所以該位掩碼為1,,而由于B不存在,所以倒數(shù)第二位掩碼為0,。
  GetDriveType()
  該函數(shù)功能是獲得一個磁盤驅(qū)動器的類型,;
  該函數(shù)原型為:UINT GetDriveType(LPCTSTR lpRootPathName);
  參數(shù)lpRootPathName:指向一個以NULL結(jié)束的指定要返回有關(guān)信息的磁盤根目錄的字符串指針。如果該參數(shù)為NULL,,則函數(shù)用當(dāng)前根目錄,。
  返回值:返回值返回指定驅(qū)動器的類型,它是下列值中的一個:
  DRIVE_UNKNOWN 不能決定驅(qū)動器類型
  DRIVE_NO_ROOT_DIR 不存在根目錄
  DRIVE_REMOVABLE 磁盤能從驅(qū)動器中刪除
  DRIVE_FIXED 磁盤不能從驅(qū)動器中刪除
  DRIVE_REMOTE 驅(qū)動器是一個遠(yuǎn)程(網(wǎng)絡(luò))驅(qū)動器
  DRIVE_CDROM 驅(qū)動器是一個CDROM驅(qū)動器
  DRIVE_RAMDISK 驅(qū)動器是一個RAM磁盤
  舉例:判斷F盤是否為光驅(qū)
  UINT IsCDRom;
  LPCTSTR Drive;
  Drive="F:\\";
  IsCDRom=GetDriveType(Drive);
  if (IsCDRom==DRIVE_CDROM) printf("F盤是光驅(qū)");
  else printf("F盤不是光驅(qū)");
  以上是兩個API函數(shù)的介紹,,通過這兩個函數(shù)的組合,,我們就可以獲得光驅(qū)數(shù)。
  下面簡單的給出源程序:
  DWORD DriveTemp; LPCTSTR DriveItem;
  unsigned short DriveNum=0,itemp;
  UINT IsLogicalCDROM;
  int CDS=0; //光驅(qū)數(shù)
  DriveTemp=GetLogicalDrives(); //獲得磁盤驅(qū)動器位掩碼
  while(DriveTemp)` //獲得驅(qū)動器數(shù)目
  {
  DriveTemp>>=1;
  DriveNum++;
  };
  for(itemp=4; itemp<=DriveNum;itemp++)
  {
  switch(itemp)
  {
  case 4:
  DriveItem="D:\\";
  break;
  case 5:
  DriveItem="E:\\";
  break;
  case 6:
  DriveItem="F:\\";
  break;
  case 7:
  DriveItem="G:\\";
  break;
  ...
  case 26:
  DriveItem="Z:\\";
  }
  IsLogicalCDROM=GetDriveType(DriveItem);
  if (IsLogicalCDROM==DRIVE_CDROM) //獲得光驅(qū)數(shù)目
  {
  CDName[CDS]=DriveItem;
  CDS++;
  }
  }
  以上的代碼僅僅是個框架,,只能獲得光驅(qū)數(shù),,但是大家只要作稍微的改動就可以實現(xiàn)不同的功能,比如將光驅(qū)盤符動態(tài)的加入菜單等等,。而且由于是API函數(shù),,所以以上的算法能被VB、DELPHI使用,。通過以上的技術(shù)與MCI相結(jié)合,,就可以輕而易舉的制作出支持多光驅(qū)的CD播放器以及VCD播放器等。例如使用MCI命令控制多個光驅(qū)的彈出關(guān)閉:
  //例子:彈出光驅(qū)F CDRomOpen(TRUE,'F')
  // 關(guān)閉光驅(qū)F CDRomOpen(FALSE,'F')
  void CDRomOpen(BOOL bOpenDrive,TCHAR cDrive)
  {
  MCI_OPEN_PARMS open;
  MCI_STATUS_PARMS status;
  DWORD flags;
  TCHAR szDriveName[4];
  strcpy(szDriveName,"?:");
  ::ZeroMemory(&open,sizeof(MCI_OPEN_PARMS));
  open.lpstrDeviceType=(LPCSTR)MCI_DEVTYPE_CD_AUDIO;
  szDriveName[0]=cDrive;
  open.lpstrElementName=szDriveName;
  flags=MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_OPEN_ELEMENT| MCI_OPEN_SHAREABLE;
  if(!mciSendCommand(0,MCI_OPEN,flags,(unsigned long)&open))
  {
  status.dwItem=MCI_STATUS_READY;
  if(bOpenDrive) mciSendCommand(open.wDeviceID,MCI_SET,MCI_SET_DOOR_OPEN,0);
  else mciSendCommand(open.wDeviceID,MCI_SET,MCI_SET_DOOR_CLOSED,0);
  mciSendCommand(open.wDeviceID,MCI_CLOSE,MCI_WAIT,0);
  }
  }
  //參數(shù)cDrive可以通過前面的兩個API函數(shù)獲得

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多