通过API实现C#对硬件的控制(一)
来源:互联网 发布:电脑网络延迟高怎么办 编辑:程序博客网 时间:2024/05/22 02:03
- 最近在做项目的过程中,涉及到对硬件启用及禁用的功能(在指定时间段内才能启用硬件)。因为C#自身对硬件的操作基本为零,为此,搜索了一下MSDN中与设备相关的API函数。还果然就有。下面一一列举出各函数的原型及相关的说明文档。并将其转为C#代码实现。
- 函数一: RegisterDeviceNotification
- 功能:注册设备或者设备类型,在指定的窗口返回相关的信息
- 原型:
- HDEVNOTIFY WINAPI RegisterDeviceNotification(
- __in HANDLE hRecipient,
- __in LPVOID NotificationFilter,
- __in DWORD Flags
- );
- 参考说明文档:http:
- 转为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;
- }
- 函数二:UnregisterDeviceNotification
- 功能:通过名柄,关闭指定设备的信息。(主要应用于清理非托管资源,并与RegisterDeviceNotification配对使用)
- 原型:
- BOOL WINAPI UnregisterDeviceNotification(
- __in HDEVNOTIFY Handle
- );
- 参考说明文档:http:
- 转为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:
- 转为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:
- 转为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:
- 转为C#后的代码:
- [DllImport("setupapi.dll", SetLastError = true)]
- public static extern bool SetupDiEnumDeviceInfo(IntPtr lpInfoSet, UInt32 dwIndex, SP_DEVINFO_DATA devInfoData);
- /// <summary>
-
-
- [StructLayout(LayoutKind.Sequential)]
- public class SP_DEVINFO_DATA
- ...{
- public int cbSize;
- public Guid classGuid;
- public int devInst;
- public ulong reserved;
- };
- 函数六: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:
- 转为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:
- 转为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:
- 转为C#后的代码:
- [DllImport("setupapi.dll", CharSet = CharSet.Auto)]
- public static extern Boolean SetupDiCallClassInstaller(UInt32 InstallFunction, IntPtr DeviceInfoSet, IntPtr DeviceInfoData);