驅動器相關的操作

  

首先來說明3個函數:

(1)查看系統中驅動器,函數原型DWORD GetLogicalDrives(VOID)

  //這個函數可以查看驅動器的個數,返回的是一個DWORD類型的數據,每一位代表相應的驅動盤是否存在,比如返回的一個數爲0X0000

 00FC(0000 0000 0000 0000 0000 0000 1111 1100)(252)其中最低位代表的是A盤,以此類推,在上數中di0位爲0,第一位爲0,第

 2、3、4、5、6、7位爲1,則說明A盤B盤不存在,C盤D盤E盤F盤G盤H盤存在,其餘不存在盤;

   DWORD  DiskInfo;  int DiskCount=0; //定義8位的整型變量

   DiskInfo=GetLogicalDrives();

   while(DiskInfo) 

   {

      if(DiskInfo&1) //看該位是否爲1,爲1代表有對應的驅動器

          DiskCount++;

      DiskInfo>>=1; //DiskInfo=DiskInfo>>1,即DiskInfo右移一位

   }

   cout<<"該機器共有"<<DiskCount<<"個邏輯驅動器";


(2)取所有驅動器字符串信息,函數原型:

   DWORD GetLogicalDriveStrings(

          DWORD nBufferLength, // 緩衝區的長度

          LPTSTRlpBuffer       // 指向所有驅動器字符串的指針);

   使用該函數一般分兩個步驟:

    ①求所有驅動器的字符串信息長度

   把0傳遞給API函數GetLogicalDriveStrings()的兩個形參,函數的返回值就是所有驅動器的字符串信息長度。語句爲:DriveStringLength=GetLogicalDriveStrings(0,NULL);

    ②動態分配內存空間保存所有驅動器的字符串信息

  通過new函數在棧區申請內存於字符指針變量DriverStr,然後把上一步求的所有驅動器的字符串信息長度DriveStringLength和準備保存所有驅動器的字符串緩衝區地址

DriverStr傳遞給API函數GetLogicalDriveStrings()的兩個形參,這樣求得的所有驅動器的字符串信息就保存到緩衝區DriverStr中,注意每個驅動器字符串的長度爲4,假設該機器

有A、B、C、D四個驅動器則在緩衝區DriverStr保存的內容是A:\<NULL>B:\<NULL>C:\<NULL>D:\<NULL><NULL>,其中<NULL>表示的是空字符,各個驅動器之間靠<NULL>

來分隔,最後以<NULL>結束。典型的代碼爲:

    DriverStr=new char[DriveStringLength+1];

    GetLogicalDriveStrings(DriveStringLength,(LPTSTR)DriverStr);

 (3)取驅動器類型

  倘若還要知道每個驅動器標識符各代表什麼類型的驅動器時,如A:代表軟盤還是硬盤,F:代表光盤還是U盤(可移動盤),就要使用API函數GetDriveType(),該函數的原型爲:

UINT GetDriveType(LPCTSTR lpRootPathName  //驅動器的根目錄);

   函數返回值爲驅動器的類型,若值爲DRIVE_REMOVABLE,代表的是可移動U盤,若值爲DRIVE_FIXED,代表的是固定盤,若值爲CDROM,代表的是光盤等。

下面是一個實例:

#include<iostream.h>

voidmain()

{

  DWORD  DiskInfo;

  char *DriverStr;

  UINT type;

  short DriveStringLength;

  _int8 DiskCount=0;//定義8位的整型變量

  DiskInfo=GetLogicalDrives();//取機器上的驅動器信息於DiskInfo

  while(DiskInfo

  {

  if(DiskInfo&1) //看該位是否爲1,爲1代表有對應的驅動器

  DiskCount++;

  DiskInfo>>=1;

  }

   cout<<"該機器共有"<<DiskCount<<"個邏輯驅動器\n";

  DriveStringLength=GetLogicalDriveStrings(0,NULL);

  //求整個驅動器的字符串信息的長度,每個驅動器字符串的長度爲4

  DriverStr=newchar[DriveStringLength+1];

  GetLogicalDriveStrings(DriveStringLength,(LPTSTR)DriverStr);

  //求整個驅動器的字符串信息於DriverStr

    for(short i=0;i<(int)(DriveStringLength/4);i++)

  {

  type=GetDriveType(DriverStr+i*4);

  //取驅動器的類型是軟盤、硬盤、光盤、可移動U

  if(type==DRIVE_CDROM)  //如果是光驅的話

     cout<<"驅動器"<<DriverStr+i*4<<"是光驅\n";

  }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章