最近在做專案的過程中,涉及到對硬體啟用及禁用的功能(在指定時間段內才能啟用硬體)。因為c#自身對硬體的操作基本為零,為此,搜尋了一下msdn中與裝置相關的api函式。還果然就有。下面一一枚舉出各函式的原型及相關的說明文件。並將其轉為c#**實現。
原型:hdevnotify winapi registerdevicenotification(
__in handle hrecipient,
__in lpvoid notificationfilter,
__in dword flags
);參考說明文件:http://msdn2.microsoft.com/en-us/library/aa363431.aspx
。轉為c#後的**為:
[dllimport("user32.dll", charset = charset.auto)]
public static extern intptr registerdevicenotification(intptr hrecipient, dev_broadcast_deviceinte***ce notificationfilter, uint32 flags);
[structlayout(layoutkind.sequential)]
public class dev_broadcast_deviceinte***ce
...函式二:unregisterdevicenotification
功能:通過名柄,關閉指定裝置的資訊。(主要應用於清理非託管資源,並與registerdevicenotification配對使用)
原型:bool winapi unregisterdevicenotification(
__in hdevnotify handle
);參考說明文件:http://msdn2.microsoft.com/en-us/library/aa363475(vs.85).aspx
。轉為c#後的**:
[dllimport("user32.dll", charset = charset.auto)]
public static extern uint unregisterdevicenotification(intptr hhandle);
函式三:setupdigetclassdevs
功能:獲取乙個指定類別或全部類別的所有已安裝裝置的資訊。
原型:hdevinfo setupdigetclassdevs( in lpguid classguid, optional in pctstr enumerator, optional in hwnd hwndparent, optional in dword flags );
參考說明文件:http://msdn2.microsoft.com/en-us/library/ms792959.aspx
。轉為c#後的**:
[dllimport("setupapi.dll", setlasterror = true)]
public static extern intptr setupdigetclassdevs(ref guid gclass, uint32 ienumerator, intptr hparent, uint32 nflags);
函式四:setupdidestroydeviceinfolist
功能:銷毀乙個裝置資訊集合,並且釋放所有關聯的記憶體。
原型:winsetupapi bool winapi setupdidestroydeviceinfolist( in hdevinfo deviceinfoset );
參考說明文件:http://msdn2.microsoft.com/en-us/library/ms792991.aspx
。轉為c#後的**:
[dllimport("setupapi.dll", setlasterror = true)]
public static extern int setupdidestroydeviceinfolist(intptr lpinfoset);
函式五:setupdienumdeviceinfo
功能:列舉指定裝置資訊集合的成員,並將資料放在sp_devinfo_data中。
原型:winsetupapi bool winapi setupdienumdeviceinfo(
in hdevinfo deviceinfoset,
in dword memberindex,
out psp_devinfo_data deviceinfodata );
參考說明文件:http://msdn2.microsoft.com/en-us/library/ms792983.aspx
。轉為c#後的**:
[dllimport("setupapi.dll", setlasterror = true)]
public static extern bool setupdienumdeviceinfo(intptr lpinfoset, uint32 dwindex, sp_devinfo_data devinfodata);
/**
/// 裝置資訊資料
///
[structlayout(layoutkind.sequential)]
public class sp_devinfo_data
...;
函式六:setupdigetdeviceregistryproperty
功能:獲取指定裝置的屬性。
原型:winsetupapi bool winapi setupdigetdeviceregistryproperty(
in hdevinfo deviceinfoset,
in psp_devinfo_data deviceinfodata,
in dword property,
out pdword propertyregdatatype,
optional out pbyte propertybuffer,
in dword propertybuffersize,
out pdword requiredsize optional );
參考說明文件:http://msdn2.microsoft.com/en-us/library/ms792967.aspx
。轉為c#後的**:
[dllimport("setupapi.dll", setlasterror = true)]
public static extern bool setupdigetdeviceregistryproperty(intptr lpinfoset, sp_devinfo_data deviceinfodata, uint32 property, uint32 propertyregdatatype, stringbuilder propertybuffer, uint32 propertybuffersize, intptr requiredsize);
函式七:setupdisetclassinstallparams
功能:停用裝置。
原型:winsetupapi bool winapi
setupdisetclassinstallparams(
in hdevinfo deviceinfoset,
in psp_devinfo_data deviceinfodata,
optional in psp_classinstall_header classinstallparams,
optional in dword classinstallparamssize );
參考說明文件:http://msdn2.microsoft.com/en-us/library/ms792876.aspx
。轉為c#後的**:
[dllimport("setupapi.dll", setlasterror = true, charset = charset.auto)]
public static extern bool setupdisetclassinstallparams(intptr deviceinfoset, intptr deviceinfodata, intptr classinstallparams, int classinstallparamssize);
函式八:setupdicallclassinstaller
功能:啟用裝置。
原型:winsetupapi bool winapi
setupdicallclassinstaller(
in di_function installfunction,
in hdevinfo deviceinfoset,
in psp_devinfo_data deviceinfodata optional );
參考說明文件:http://msdn2.microsoft.com/en-us/library/ms792989.aspx
。轉為c#後的**:
[dllimport("setupapi.dll", charset = charset.auto)]
public static extern boolean setupdicallclassinstaller(uint32 installfunction, intptr deviceinfoset, intptr deviceinfodata);
通過API實現C 對硬體的控制(二)
原文 下面是該類的 using system using system.collections.generic using system.text using system.runtime.interopservices namespace hardware wm devicechange mess...
通過win32api讓c 控制Windows工作列
c 中宣告如下 using system.runtime.interopservices dllimport user32.dll entrypoint findwindowa public static extern intptr findwindowa string lp1,string lp2...
VB對低層硬體的訪問控制
vb沒有提供直接訪問低層硬體的控制項和方法,一度給對訪問硬體感興趣的程式設計者帶來不便。目前我們可從網上搜尋到支援低層硬體訪問的dll和activex控制項,通過它們可讀寫儲存器單元 埠,甚至控制硬體中斷。下面通過兩個利用dll和activex控制項示例介紹vb對低層硬體的訪問控制。一 利用dll讀...