• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • C#如何取硬件标志

      using System;

      using System.Runtime.InteropServices;

      using  System.Management;

      namespace Hardware

      {

      /// <summary>

      /// Hardware_Mac 的摘要说明。

      /// </summary>

      public class HardwareInfo

      {

        //取机器名

        public string GetHostName()

        {

         return System.Net.Dns.GetHostName();

        }

        //取CPU编号

        public String GetCpuID()

        {

         try

         {

          ManagementClass mc = new ManagementClass("Win32_Processor");

          ManagementObjectCollection moc = mc.GetInstances();

            

          String strCpuID = null ;

          foreach( ManagementObject mo in moc )

          {

           strCpuID = mo.Properties["ProcessorId"].Value.ToString();

           break;

          }

          return strCpuID;

         }

         catch

         {

          return "";

         }

        }//end method

        //取第一块硬盘编号

        public String GetHardDiskID()

        {

         try

         {

          ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

          String strHardDiskID = null ;

          foreach(ManagementObject mo in searcher.Get())

          {    

           strHardDiskID = mo["SerialNumber"].ToString().Trim();

           break;          

          }

          return strHardDiskID ;

         }

         catch

         {

          return "";

         }

        }//end

        public enum NCBCONST

        {

         NCBNAMSZ   =16,      /* absolute length of a net name         */

         MAX_LANA   =254,      /* lana's in range 0 to MAX_LANA inclusive   */

         NCBENUM      =0x37,      /* NCB ENUMERATE LANA NUMBERS            */

         NRC_GOODRET   =0x00,      /* good return                              */

         NCBRESET    =0x32,      /* NCB RESET                        */

         NCBASTAT    =0x33,      /* NCB ADAPTER STATUS                  */

         NUM_NAMEBUF =30,      /* Number of NAME's BUFFER               */

        }

        [StructLayout(LayoutKind.Sequential)]

         public struct ADAPTER_STATUS

        {

         [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)]

         public byte[] adapter_address;

         public byte   rev_major;  

         public byte   reserved0;  

         public byte   adapter_type;  

         public byte   rev_minor;  

         public ushort    duration;  

         public ushort    frmr_recv;  

         public ushort    frmr_xmit;  

         public ushort    iframe_recv_err;  

         public ushort    xmit_aborts;  

         public uint   xmit_success;  

         public uint   recv_success;  

         public ushort    iframe_xmit_err;  

         public ushort    recv_buff_unavail;  

         public ushort    t1_timeouts;  

         public ushort    ti_timeouts;  

         public uint   reserved1;  

         public ushort    free_ncbs;  

         public ushort    max_cfg_ncbs;  

         public ushort    max_ncbs;  

         public ushort    xmit_buf_unavail;  

         public ushort    max_dgram_size;  

         public ushort    pending_sess;  

         public ushort    max_cfg_sess;  

         public ushort    max_sess;  

         public ushort    max_sess_pkt_size;  

         public ushort    name_count;

        }

        [StructLayout(LayoutKind.Sequential)]

         public struct NAME_BUFFER

        {  

         [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]

         public byte[] name;

         public byte name_num;  

         public byte name_flags;  

        }

        [StructLayout(LayoutKind.Sequential)]

         public struct NCB

        {  

         public byte  ncb_command;  

         public byte  ncb_retcode;  

         public byte  ncb_lsn;  

         public byte  ncb_num;  

         public IntPtr ncb_buffer;  

         public ushort ncb_length;  

         [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]

         public byte[]  ncb_callname;  

         [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]

         public byte[]  ncb_name;  

         public byte  ncb_rto;  

         public byte  ncb_sto;  

         public IntPtr ncb_post;  

         public byte  ncb_lana_num;  

         public byte  ncb_cmd_cplt;  

         [MarshalAs(UnmanagedType.ByValArray, SizeConst=10)]

         public byte[] ncb_reserve;

         public IntPtr ncb_event;

        }

        [StructLayout(LayoutKind.Sequential)]

         public struct LANA_ENUM

        {  

         public byte length;  

         [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)]

         public byte[] lana;

        }

        [StructLayout(LayoutKind.Auto)]

         public struct ASTAT

        {  

         public ADAPTER_STATUS adapt;

         [MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)]

         public NAME_BUFFER[] NameBuff;

        }

        public class Win32API

        {

         [DllImport("NETAPI32.DLL")]

         public static extern char Netbios(ref NCB ncb);

        }

        

        public string GetMacAddress()

        {

         string addr="";

         try

         {

          int cb;

          ASTAT adapter;

          NCB Ncb=new NCB();

          char uRetCode;

          LANA_ENUM lenum;

          Ncb.ncb_command = (byte)NCBCONST.NCBENUM;

          cb = Marshal.SizeOf(typeof(LANA_ENUM));

          Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);

          Ncb.ncb_length = (ushort)cb;

          uRetCode = Win32API.Netbios(ref Ncb);

          lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));

          Marshal.FreeHGlobal(Ncb.ncb_buffer);

          if(uRetCode != (short)NCBCONST.NRC_GOODRET)

           return "";

          for(int i=0; i < lenum.length ;i++)

          {

           Ncb.ncb_command = (byte)NCBCONST.NCBRESET;

           Ncb.ncb_lana_num = lenum.lana[i];

           uRetCode = Win32API.Netbios(ref Ncb);

           if(uRetCode != (short)NCBCONST.NRC_GOODRET)

            return "";

           Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;

           Ncb.ncb_lana_num = lenum.lana[i];

           Ncb.ncb_callname[0]=(byte)'*';

           cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER))*(int)NCBCONST.NUM_NAMEBUF;

           Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);

           Ncb.ncb_length = (ushort)cb;

           uRetCode = Win32API.Netbios(ref Ncb);

           adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));

           Marshal.FreeHGlobal(Ncb.ncb_buffer);

           if (uRetCode == (short)NCBCONST.NRC_GOODRET)

           {

            if(i>0)

             addr += ":";

            addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",

             adapter.adapt.adapter_address[0],

             adapter.adapt.adapter_address[1],

             adapter.adapt.adapter_address[2],

             adapter.adapt.adapter_address[3],

             adapter.adapt.adapter_address[4],

             adapter.adapt.adapter_address[5]);

           }

          }

         }

         catch

         {}

         return addr.Replace(' ', '0');

        }

      }

      }

      C#里的委托和事件实现Observer
      用C#实现全屏幕截图,.Net网站独立配置文件读写方案,SmartSoft中用C#.Net实现AutoCAD块属性提取,.NET组件和COM组件之间的相互操作,.net中前台javascript与后台c#相互调用,正确理解C#中的ref关键字,Visual C#2005中使用正则表达式,实例:用Visual C#制作新闻阅读器,病毒及流氓软件自我复制的简单实现(C#),在.NET中使用域对象持续模式,汇总c#.net常用函数和方法集,C#开发的两个原则的深入讨论,c#.net常用函数列表,在C#程序设计中使用Win32类库,用C#轻松在DOTNET中实现缩略图,使用C#编写的一个定时关机程序,深入理解C#编程中的组件-事件-委托,通过Visual C#.NET建一个DTS任务,用C#的Raw Socket实现网络封包监视,利用C#实现标准的 Dispose模式
      Visual C#

    • 0
    • 0
    • 0
    • 68
    • 单栏布局 侧栏位置: