VC實現自動監測光碟機狀態的改變

2021-05-26 13:16:18 字數 1700 閱讀 8541

一、實現原理

windows系統通過gdi(圖形裝置介面)將系統的硬體和使用者可以操作的程式設計介面相分離,以保證系統的穩定型和安全性。當某乙個裝置的硬體配置發生變化時,windows傳送廣播訊息wm_devicechange給相關的應用和裝置驅動程式,此時在應用程式中可以截獲該訊息並分析其中的訊息引數,先分辨當前的訊息內容,然後呼叫不同的事件處理程式。本文中主要考慮的是光碟機的彈出和送入事件,因此程式設計時只需對邏輯驅動器進行掃瞄,判斷是哪個驅動器號發生變化即可。一般的外設(包括軟、硬碟驅動器、光碟機等)在windows系統中按照邏輯上的驅動器名稱進行管理,這樣就遮蔽了使用者和計算機硬體直接打交道。windows中用掩碼數字0代表驅動器「a」,1代表驅動器「b」,依此類推。其中每個邏輯驅動器又有0和1兩種狀態變化,如果驅動器一直未發生變化,則此值為0,否則置為1,乙個邏輯驅動器狀態可以響應多種事件,如開啟、關閉、新新增、刪除等事件,甚至可以響應使用者自定義的事件。

本文中的程式主要是監測光碟機的彈出和送入的狀態改變,當應用程式啟動後,彈出乙個對話方塊,說明正在等待光碟機事件的發生,此時如果將光碟機彈出,應用程式會提示此時光碟驅動器已經彈出,在送入光碟機之後,並且光碟機中有cdrom碟片時,應用會提示光碟機已經就緒。

二、程式實現

第乙個函式是chfirstdrivefrommask(ulong unitmask),該函式的作用是將響應wm_devicechange訊息事件的內容(即驅動器掩碼)作為輸入,和系統定義的掩碼相比較,從而返回發生變化事件的驅動器的邏輯名稱,如「e盤」、「f盤」等。函式的源**如下:

char chfirstdrivefrommask (ulong unitmask)

return (i + 'a');}

bool winapi dlgproc(hwnd hwnd, uint umsg, wparam wparam, lparam lparam)

}break;

//當乙個裝置變得被移走並變得不可用時,

//系統會傳送廣播事件dbt_ deviceremovecomplete

case dbt_deviceremovecomplete:

// 判斷cdrom碟片是否從光碟機中移走

if (lpdb -> dbch_devicetype == dbt_devtyp_volume)

}break;

}//處理其他windows訊息

case wm_command:

int wmid, wmevent;

wmid = loword(wparam);

wmevent = hiword(wparam);

switch (wmid)

default:

fret = false;

break;

}// 禁止光碟機的autoplay功能

static uint umsgquerycancelautoplay=registerwindowmessage("querycancelautoplay");

if (umsg==umsgquerycancelautoplay)

return(fret);}

第三個函式非常簡單,產生乙個模式對話方塊。**如下:

int apientry winmain

(hinstance hinstance, hinstance hprevinstance,

lpstr lpcmdline, int ncmdshow)

VC實現光碟機 軟碟機 USB的禁用和啟用

由於工作的實際需要,需要對光碟機,軟碟機,usb的啟用和禁用實現控制。參考大家提供的對網絡卡禁用的 實現了光碟機,軟碟機,usb的啟用和禁用。主要實現 如下 必要的標頭檔案和要鏈結的lib檔案 include include pragma comment lib,setupapi.lib pragm...

VC實現光碟機 軟碟機 USB的禁用和啟用

由於工作的實際需要,需要對光碟機,軟碟機,usb的啟用和禁用實現控制。參考大家提供的對網絡卡禁用的 實現了光碟機,軟碟機,usb的啟用和禁用。主要實現 如下 必要的標頭檔案和要鏈結的lib檔案 include include pragma comment lib,setupapi.lib pragm...

VC實現光碟機 軟碟機 USB的禁用和啟用

由於工作的實際需要,需要對光碟機,軟碟機,usb的啟用和禁用實現控制。參考大家提供的對網絡卡禁用的 實現了光碟機,軟碟機,usb的啟用和禁用。主要實現 如下 必要的標頭檔案和要鏈結的lib檔案 include include pragma comment lib,setupapi.lib pragm...