ICANN认证国际域名顶级注册机构
网站建设,域名注册,空间租用,软件销售,广告设计 域名注册,空间租用, 网站建设,东莞网页设计,域名注册,网站推广,网站开发,网页设计 网站推广,,百度推广,新浪推广,雅虎推广,网易推广 标志设计,画册设计,包装设计,VI策划,企业形象顾问 连邦软件加盟店,提供销遥行,管家婆,速达,用友ERP,诺顿等软件报价及销售 建站必读 腾达网络,上网帮助中心, 腾达为东莞等地,提供网站建设,网站推广,广告设计,软件销售等优质服务!
建站必读


 
 
当前位置:首页 -> 建站必读 -> .NET技术
.NET – 深入系统编程 - Part 1
.NET – 深入系统编程 - Part 1

By Vladimir Afanasyev

介绍



在我以前的文章里面,我举了很多系统编程的例子。很多年前,我特别喜欢琢磨系统表格以及系统工具。当然,那时我还没有一个真正PC,只是类似于IBM360、PDP11或者microVAX,但是那种感觉不错。这些年我依然喜欢在COM接口、DLL库和硬盘配置上作些研究。啊哈,我一直喜欢系统编程!



目的



很多人认为C#只是一个 "child language" 。在我看来,这绝对是错误的!为了证明我的观点,我准备编写三个关于硬件设备配置的例子,展现如何使用C#和Win32 API(甚至DDK)一起工作。主要是使用P/Invoke来实现。同时C#非常完美的解决了不同平台数据交流的问题,以及通过Windows Forms ,使我们更容易使用应用程序。



设备类

All devices in the system join in the device classes. As you can see in the below picture, the class has name and Guid (so it can be found in Registry). The class can also have a description. For example, for class "Ports" the description is "Ports (COM & LPT)". Class also has devices that are present in the configuration.

所有的设备信息都存在于设备类中。这个类拥有名字和Guid(因此它可以在注册表中被找到)。这个类还有一些描述,比如类"Ports"的描述是"Ports (COM & LPT)"。

系统设备管理器给出了所有在PC上存在的设备类的信息:

下面,你将看到使用C#遍历所有设备的例子,它使用了P/Invoke、DDK和SDK DLLs。



using System;

using System.Runtime.InteropServices;// P/Invoke 必需

using System.Text;





namespace DevClasses

{

/// <summary>

/// Summary description for Class.

/// </summary>

class DeviceClasses

{

/// <summary>

/// The main entry point for the application.

/// </summary>

public const int MAX_NAME_PORTS=7;

public const int RegDisposition_OpenExisting=(0x00000001);

// open key only if exists

public const int CM_REGISTRY_HARDWARE=(0x00000000);



public const int CR_SUCCESS = (0x00000000);

public const int CR_NO_SUCH_VALUE = (0x00000025);

public const int CR_INVALID_DATA = (0x0000001F);

public const int DIGCF_PRESENT = (0x00000002);

public const int DIOCR_INSTALLER = (0x00000001);

// MaximumAllowed access type to Reg.

public const int MAXIMUM_ALLOWED = (0x02000000);

[StructLayout(LayoutKind.Sequential)] //为了保证数据交流顺利



public class SP_DEVINFO_DATA //struct 也可以

{

public int cbSize;

public Guid ClassGuid;

public int DevInst; // DEVINST handle

public ulong Reserved;

};



//声明函数原型

[DllImport("cfgmgr32.dll")]

public static extern UInt32

CM_Open_DevNode_Key(IntPtr dnDevNode, UInt32 samDesired,

UInt32 ulHardwareProfile,

UInt32 Disposition,IntPtr phkDevice, UInt32 ulFlags);



[DllImport("cfgmgr32.dll")]

public static extern UInt32

CM_Enumerate_Classes(UInt32 ClassIndex,ref Guid ClassGuid, UInt32 Params);



[DllImport("setupapi.dll")]//

public static extern Boolean

SetupDiClassNameFromGuidA(ref Guid ClassGuid,

StringBuilder ClassName, //char * ?

UInt32 ClassNameSize, ref UInt32 RequiredSize);



[DllImport("setupapi.dll")]

public static extern IntPtr

SetupDiGetClassDevsA(ref Guid ClassGuid, UInt32 Enumerator,

IntPtr hwndParent, UInt32 Flags);



[DllImport("setupapi.dll")]

public static extern Boolean

SetupDiEnumDeviceInfo(IntPtr DeviceInfoSet, UInt32 MemberIndex,

ref SP_DEVINFO_DATA DeviceInfoData);



[DllImport("setupapi.dll")]

public static extern Boolean

SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet);



[DllImport("setupapi.dll")]

public static extern IntPtr

SetupDiGetClassDevsA(ref Guid ClassGuid, UInt32 samDesired,

UInt32 Flags, ref string hwndParent, IntPtr Reserved);



[DllImport("setupapi.dll")]

public static extern IntPtr

SetupDiOpenClassReg
 
 
本站关键词:
| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|| 塘厦镇 谢岗镇 清溪諀常平镇 桥头镇 横沥镇|东坑镇 企石镇 石排镇|茶山镇 莞城 东城|万江 南城|东莞网络服务|东莞软件开发|东莞软件设计|东莞主页设计|东莞公司主页|东莞建站套餐|东莞建站服务|
域名注册 | 虚拟主机 | 网站建设 | 网站推广 | 广告设计 | 帮助中心 | 软件中心 | 关于腾达
东莞市腾达信息工程有限公司      本站网络实名: 东莞网站建设
地址:东莞市新城市中心区第一国际B座610   邮编:523007
电话:0769-22026071 22026072 传真:0769-22026076 24小时服务热线:13712032014
© 2002~2005 腾达网络   版权所有