在做項目的過程中,,涉及到對硬件啟用及禁用的功能(在指定時間段內(nèi)才能啟用硬件)。因為C#自身對硬件的操作基本為零,,為此,,搜索了一下MSDN中與設(shè)備相關(guān)的API函數(shù),。還果然就有。下面一一列舉出各函數(shù)的原型及相關(guān)的說明文檔,。并將其轉(zhuǎn)為C#代碼實現(xiàn),。
函數(shù)一: RegisterDeviceNotification 功能:注冊設(shè)備或者設(shè)備類型,在指定的窗口返回相關(guān)的信息
原型:
HDEVNOTIFY WINAPI RegisterDeviceNotification( __in HANDLE hRecipient, __in LPVOID NotificationFilter, __in DWORD Flags );
參考說明文檔:http://msdn2.microsoft.com/en-us/library/aa363431.aspx,。
轉(zhuǎn)為C#后的代碼為:
[DllImport(“user32.dll“, CharSet = CharSet.Auto)] public static extern IntPtr RegisterDeviceNotification(IntPtr hRecipient, DEV_BROADCAST_DEVICEINTERFACE NotificationFilter, UInt32 Flags); [StructLayout(LayoutKind.Sequential)] public class DEV_BROADCAST_DEVICEINTERFACE ...{ public int dbcc_size; public int dbcc_devicetype; public int dbcc_reserved; }
函數(shù)二:UnregisterDeviceNotification 功能:通過名柄,,關(guān)閉指定設(shè)備的信息。(主要應(yīng)用于清理非托管資源,,并與RegisterDeviceNotification配對使用)
原型:
BOOL WINAPI UnregisterDeviceNotification( __in HDEVNOTIFY Handle );
參考說明文檔:http://msdn2.microsoft.com/en-us/library/aa363475(VS.85).aspx,。
轉(zhuǎn)為C#后的代碼:
[DllImport(“user32.dll“, CharSet = CharSet.Auto)] public static extern uint UnregisterDeviceNotification(IntPtr hHandle);
函數(shù)三:SetupDiGetClassDevs 功能:獲取一個指定類別或全部類別的所有已安裝設(shè)備的信息。
原型:
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,。
轉(zhuǎn)為C#后的代碼:
[DllImport(“setupapi.dll“, SetLastError = true)] public static extern IntPtr SetupDiGetClassDevs(ref Guid gClass, UInt32 iEnumerator, IntPtr hParent, UInt32 nFlags);
函數(shù)四:SetupDiDestroyDeviceInfoList 功能:銷毀一個設(shè)備信息集合,,并且釋放所有關(guān)聯(lián)的內(nèi)存。
原型:
WINSETUPAPI BOOL WINAPI SetupDiDestroyDeviceInfoList( IN HDEVINFO DeviceInfoSet ); 參考說明文檔:http://msdn2.microsoft.com/en-us/library/ms792991.aspx,。
轉(zhuǎn)為C#后的代碼:
[DllImport(“setupapi.dll“, SetLastError = true)] public static extern int SetupDiDestroyDeviceInfoList(IntPtr lpInfoSet);
函數(shù)五:SetupDiEnumDeviceInfo 功能:枚舉指定設(shè)備信息集合的成員,,并將數(shù)據(jù)放在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,。
轉(zhuǎn)為C#后的代碼:
[DllImport(“setupapi.dll“, SetLastError = true)] public static extern bool SetupDiEnumDeviceInfo(IntPtr lpInfoSet, UInt32 dwIndex, SP_DEVINFO_DATA devInfoData); /**//// 〈summary〉 /// 設(shè)備信息數(shù)據(jù) /// 〈/summary〉 [StructLayout(LayoutKind.Sequential)] public class SP_DEVINFO_DATA ...{ public int cbSize; public Guid classGuid; public int devInst; public ulong reserved; };
函數(shù)六:SetupDiGetDeviceRegistryProperty 功能:獲取指定設(shè)備的屬性,。
原型:
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。
轉(zhuǎn)為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);
函數(shù)七:SetupDiSetClassInstallParams 功能:停用設(shè)備,。
原型:
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,。
轉(zhuǎn)為C#后的代碼:
[DllImport(“setupapi.dll“, SetLastError = true, CharSet = CharSet.Auto)] public static extern bool SetupDiSetClassInstallParams(IntPtr DeviceInfoSet, IntPtr DeviceInfoData, IntPtr ClassInstallParams, int ClassInstallParamsSize);
函數(shù)八:SetupDiCallClassInstaller 功能:啟用設(shè)備。
原型:
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,。
轉(zhuǎn)為C#后的代碼:
[DllImport(“setupapi.dll“, CharSet = CharSet.Auto)] public static extern Boolean SetupDiCallClassInstaller(UInt32 InstallFunction, IntPtr DeviceInfoSet, IntPtr DeviceInfoData);
|