青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Hello World!

程序員那點事兒

首頁 新隨筆 聯系 聚合 管理
  20 Posts :: 6 Stories :: 0 Comments :: 0 Trackbacks
如何在C++Builder中檢測硬件
(西安 楊洪辰)

資料來源: http://go5.163.com/yarrows/tips/cbc_10.htm

  在我們編寫的程序中常常要和硬件打交道,那麼如何在程序中確定系統中是否有該設備,
它的運行狀態又是怎樣的呢﹖對於初學者來說,這個問題常常不好解決,其實只需簡單地利
用幾個API函數,硬件的問題並不神秘。下面就讓我們一起看看在C++ Builder中是如何
檢測硬件的。
  1. 檢測CPU的型號
  先讓我們從最簡單的做起,看一看自己的CPU型號。首先,在C++ Builder中畫出圖1
所示的窗體,在下面的幾個例子中我們將一直使用這個窗體作示範,它包括一個用來激活測
試的Button和一個用來顯示結果的Memo。我們可以用GetSystemInfo這個API獲得CPU的型
號。將下列代碼添加到Button的Click事件裡就可以了:
  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
  //獲得CPU型號
  SYSTEM_INFO systeminfo;
  GetSystemInfo (&systeminfo);
  Memo1→Lines→Add(“您的CPU類型是:”+String( systeminfo.dwProcessorType ));
  }
  運行它,點擊Test試試,CPU型號出來了吧!
  2.檢測內存狀態
  獲得內存狀態的方法和CPU型號差不多,只是他用到的是另外一個API:GlobalMemoryStatus。
其中,成員dwTotalPhys用來獲得物理內存總量,而dwAvailPhys顧名思義是有效物理內存
的意思。我們只要把下面幾行代碼加到上面程序的後面就可以了(不用重做,下同):
  //獲得內存狀態
  MEMORYSTATUS memory;
  memory.dwLength =sizeof(memory); //初始化
  GlobalMemoryStatus(&memory);
  Memo1→Lines→Add(“您的物理內存是(Mb):”+String(int(memory.dwTotalPhys /1024/1024)));
  Memo1→Lines→Add(“其中可用內存是(Kb):”+String(int( memory. /1024)));
  怎麼樣,看出點門道了麼﹖兩段程序的格式幾乎一模一樣,其實,GetSystemInfo和
GlobalMemoryStatus還可以獲得許多其他有關CPU和內存的信息,就按照上面的格式去套
就行了,更詳細的資料可以去看C++ Builder4的Help。
  3. 檢測可用硬盤空間
  好了,經過前面兩個簡單問題的熱身,我們來處理一個稍微復雜的問題:我們知道安
裝程序大都有一個檢測硬盤空間的過程,那麼這是怎麼實現的呢?他用到的是API函數
GetDiskFreeSpace,這個函數輸入一個參數:目標盤的路徑﹔返回四個參數,依次是每簇
的扇區數、每扇區的字節數、空閑的簇數、總簇數。假如我們需要檢測C盤的總容量和可用
容量,那麼可以把以下代碼加到上面的程序中:
  //獲得C盤可用空間
  DWORD sector,byte,cluster,free;
  long int freespace,totalspace;
  GetDiskFreeSpace(“C:”,&sector,&byte,&free,&cluster); //獲得返回參數
  totalspace=int(cluster)*int(byte)*int(sector)/1024/1024; //計算總容量
  freespace=int(free)*int(byte)*int(sector)/1024/1024; //計算可用空間
  Memo1→Lines→Add(“C盤總空間(Mb):”+String(totalspace));
  Memo1→Lines→Add(“C盤可用空間(Mb):”+String(freespace));
  怎麼樣?現在可以自己做安裝程序了吧!
  4. 檢測CD-ROM
  我們在編寫程序時常常需要讀取CD-ROM,可是究竟哪一個盤符是光驅呢﹖有人是將最
後一個盤符當作光驅的,但是當遇到雙光驅或者MO的情況時常常會出錯。其實這個問題用
一個API來解決並不困難,這就是:GetDriveType(),這個函數返回一個0~6之間的值,
依次代表:0─未知盤、1─不存在、2─可移動磁盤、3─固定磁盤、4─網絡磁盤、
5─CD-ROM、6─內存虛擬盤。因此我們可以添加下面代碼來尋找CD-ROM:
  // 獲得CD-ROM信息
  UINT type;
  char name;
  for (name=‘C’;name<=‘Z’;name++) //循環檢測A~Z
  { type = GetDriveType((String(name)+String(‘:’)).c_str()); //獲得磁盤類型
  if (type==5)
  Memo1→Lines→Add(“您的光驅盤符為:”+String(name));
   }
  得到光驅盤符之後我們可以進一步利用API函數GetVolumeInformation檢測光驅中
是否有光盤,這個函數如果成功調用,會得到磁盤的卷標序列號等信息﹔如果調用失敗則
可知光驅中無光盤,程序如下://檢測光盤(假設光驅為G:)
  char volname[255],filename[100];//buffer[512];
  DWORD sno,maxl,fileflag ;
  if (!(GetVolumeInformation(“G:”, volname,255,&sno,&maxl,&fileflag,filename,100)))
   //如果返回值為假
  Memo1→Lines→Add (“G驅中沒有發現光盤”);
   else
   //如果返回值為真
  {Memo1→Lines→Add (“G驅中光盤卷標為:”+String(volname));
  Memo1→Lines→Add (“G驅中光盤序號為:”+String(sno));
   }
  5. 檢測聲卡配置
  在編制多媒體程序時,我們常常會用到聲音文件,而當這些程序在沒有配置聲卡的機
器上運行時,我們應該給出必要的警告。對於聲卡的檢測,可以分別通過waveOutGetNumDevs()
和midiOutGetNumDevs()檢測波形設備和MIDI設備,再利用waveOutGetDevCaps()和
midiOutGetDevCaps()獲得聲音設備的細節資料。將下面一段代碼加入上面的程序即可,
但要注意將#include 添至程序首部:
  //檢測聲卡
  int wavedevice,mididevice;
  WAVEOUTCAPS wavecap;
  MIDIOUTCAPS midicap;
  wavedevice=(int)waveOutGetNumDevs(); //波形設備信息
  mididevice=(int)midiOutGetNumDevs(); // MIDI設備信息
  if (wavedevice==0)
  Memo1→Lines→Add (“沒有發現波形設備”);
  else
  {waveOutGetDevCaps(0,&wavecap,sizeof(WAVEOUTCAPS));
  Memo1→Lines→Add (“當前波形設備:”+String(wavecap.szPname));
   }
  if (mididevice==0)
  Memo1→Lines→Add (“沒有發現MIDI設備”);
  else
  {midiOutGetDevCaps(0,&midicap,sizeof(MIDIOUTCAPS));
  Memo19→Lines→Add (“當前MIDI設備:”+String(midicap.szPname));
   }[/cdoe]
  6. 檢測顯示器信息
  編寫和圖形圖像有關的程序時常常需要檢測顯示器的分辨率和色深,最後我們來看看
這個問題的解決辦法。分辨率的求法很簡單,直接調用Screen對象的屬性就行了。而要求
色深則要利用API函數GetDeviceCaps獲得每像素的比特數和色彩的頁面數,然後計算2的
“每像素的比特數”次冪即得色彩的梯度數,再計算“色彩的梯度數”的“色彩的頁面數”
次冪即得色深。由於該段程序用到了冪運算,所以要記得加上#include ,程序如下:
  //檢測顯示器[code]
  int tcs;
  long int bpp,cp,tc;
  Memo1→Lines→Add (“當前分辨率為:”+String(Screen→Width)+“*”+
String(Screen→Height));
  bpp=GetDeviceCaps(Form1→Canvas→Handle ,BITSPIXEL);
  tcs=pow(2,bpp); //計算色彩的梯度數
  cp= GetDeviceCaps(Form1→Canvas→Handle,PLANES);
  tc= pow(tcs,cp); //計算色深
  Memo1→Lines→Add(“當前色深為:”+String(tc));
  好了,現在在讓我們點擊一下Test吧,硬件情況盡收眼底!其實本文所涉及
的API函數的功能不止這些,大家下去可以查一查Win32 API手冊,或者直接在C++
Builder 4中察看Help。相信自己開發一個硬件檢測軟件也不是難事哦!
  以上程序均在Windows98中文版、C++ Builder 4中調試通過,如果大家在硬件檢
測方面有什麼問題歡迎和我探討,mail to AlexYoung@263.net。
posted on 2012-12-27 13:52 hello wold! 閱讀(385) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美一区二区在线观看| 久久亚洲国产精品一区二区| 最新成人av网站| 亚洲视频axxx| 免费观看欧美在线视频的网站| 亚洲欧美日韩精品久久亚洲区 | 亚洲视频axxx| 免费亚洲电影在线| 国产自产女人91一区在线观看| 一区二区三区欧美在线观看| 亚洲春色另类小说| 国产精品99久久久久久久久 | 亚洲一区亚洲二区| 亚洲精品资源| 欧美日韩美女在线| 亚洲欧美国产毛片在线| 99re6热在线精品视频播放速度| 久久久久久有精品国产| 国产精品日韩| 亚洲无线一线二线三线区别av| 亚洲国产午夜| 欧美精品粉嫩高潮一区二区 | 国产亚洲精品一区二区| 中文日韩电影网站| 亚洲精品国产精品国自产在线 | 欧美日韩在线不卡一区| 欧美激情一区二区三区成人| 亚洲另类视频| 久久久久久电影| 在线日韩电影| 亚洲黄色片网站| 欧美极品一区| 亚洲专区一二三| 午夜精品国产| 伊人久久综合| 欧美激情视频在线播放 | 亚洲影院在线观看| 国产日韩精品视频一区| 久久久xxx| 免费久久精品视频| 国产精品mm| 欧美一区二区三区电影在线观看| 欧美一区二区视频在线观看2020| 一区二区在线观看av| 欧美成人精品不卡视频在线观看| 欧美剧在线观看| 亚洲午夜精品| 久久精选视频| 亚洲一级电影| 国产精品日本精品| 久久精品一区二区三区不卡牛牛| 久久天堂精品| 午夜精品久久久久久久99热浪潮 | 亚洲国产精品成人va在线观看| 欧美片网站免费| 久久国产精品72免费观看| 猛干欧美女孩| 久久精品亚洲国产奇米99| 欧美福利电影在线观看| 久久成人精品无人区| 欧美精品成人| 久久免费视频网| 欧美三区视频| 亚洲第一区色| 狠狠做深爱婷婷久久综合一区| 亚洲人成在线观看网站高清| 久久国产精品久久久久久久久久| 一区二区三区日韩欧美精品| 久久国产精品毛片| 亚洲欧美激情四射在线日| 卡一卡二国产精品| 欧美在线精品免播放器视频| 欧美日韩国产电影| 欧美日韩亚洲精品内裤| 欧美精品一卡| 久久大香伊蕉在人线观看热2| 亚洲精品麻豆| 久久久久久一区| 久久精品免费播放| 国产精品实拍| 中文av一区特黄| 亚洲深夜福利网站| 久久午夜电影| 免费人成精品欧美精品| 国产丝袜一区二区| 亚洲一区二区免费视频| 亚洲永久免费观看| 欧美日本中文| 日韩视频免费看| 艳妇臀荡乳欲伦亚洲一区| 久久青青草原一区二区| 亚洲女同性videos| 日韩一区二区精品| 日韩一区二区精品| 欧美大胆成人| 亚洲人成亚洲人成在线观看图片| 亚洲精品久久嫩草网站秘色 | 黄色成人在线| 久久久国产视频91| 麻豆乱码国产一区二区三区| 91久久线看在观草草青青| 久久免费精品日本久久中文字幕| 性欧美video另类hd性玩具| 欧美视频精品一区| 日韩视频专区| 亚洲先锋成人| 国产精品亚洲综合色区韩国| 午夜精品久久久久久99热| 香蕉免费一区二区三区在线观看 | 欧美福利一区二区三区| 亚洲欧洲日本专区| 国产精品99久久99久久久二8| 欧美日韩日日骚| 亚洲婷婷综合色高清在线| 欧美在线日韩| 亚洲高清视频的网址| 欧美成人精品激情在线观看| 亚洲视频999| 国产伦精品一区二区三区视频黑人 | 99精品国产在热久久| 欧美色视频一区| 亚洲免费在线| 久久综合色天天久久综合图片| 亚洲国产精品电影| 欧美激情一区二区三区在线视频观看 | 亚洲国产婷婷香蕉久久久久久| 亚洲最新在线| 国产欧美日韩综合| 狂野欧美一区| 亚洲一二三区精品| 美日韩精品视频免费看| 日韩一级精品| 国产午夜精品视频| 欧美国产精品| 欧美一级一区| 亚洲三级毛片| 久久人人爽爽爽人久久久| 欧美高清视频在线观看| 中文网丁香综合网| 免费成人在线观看视频| 亚洲在线不卡| 亚洲精品人人| 国产主播在线一区| 欧美日韩综合精品| 久久亚洲欧洲| 亚洲欧美一区二区原创| 亚洲激情网站免费观看| 久久精品人人爽| 欧美激情亚洲精品| 亚洲尤物在线| 亚洲日韩中文字幕在线播放| 国产精品入口夜色视频大尺度| 亚洲一区精品视频| 亚洲成色精品| 国内精品久久久久久久97牛牛| 欧美三日本三级三级在线播放| 久久久久国产精品午夜一区| 亚洲午夜免费视频| 亚洲精品欧洲精品| 久久一区二区三区四区| 小黄鸭精品aⅴ导航网站入口| 亚洲伦理在线免费看| 99精品久久久| 国产日韩欧美在线观看| 欧美特黄一级大片| 欧美精品一区二区三| 久久综合久久综合这里只有精品| 香蕉久久国产| 午夜精品久久久久久久久久久久久 | 亚洲免费不卡| 91久久久国产精品| 亚洲电影免费观看高清完整版在线| 久久精品中文字幕免费mv| 性刺激综合网| 亚洲小说欧美另类社区| 欧美激情中文字幕在线| 欧美大片va欧美在线播放| 免费成人在线视频网站| 另类成人小视频在线| 久久伊人免费视频| 久久一区二区三区四区五区| 狼人天天伊人久久| 噜噜噜躁狠狠躁狠狠精品视频| 猫咪成人在线观看| 欧美成人第一页| 欧美国产欧美亚州国产日韩mv天天看完整| 久久精品综合| 男女激情久久| 亚洲国产婷婷香蕉久久久久久99 | 亚洲福利视频二区| 亚洲高清视频一区二区| 亚洲激情视频网站| 亚洲毛片一区| 亚洲一区二区三区涩| 欧美夜福利tv在线| 欧美va亚洲va香蕉在线| 亚洲高清不卡在线| 99精品99| 亚洲欧美日韩在线综合| 久久九九精品|