C#编程如何实现这个功能DELPHI读取CPU和硬盘ID功能
DELPHI编程实现读取“CPU的序列号”如:0001-067A-BFEB-FBFF-0408-E39D
DELPHI编程实现读取“硬盘ID序列号”如:6VM1CPBN
C#编程如何实现这个功能
0001-067A-BFEB-FBFF-0408-E39D,并获取CPU的序列号
6VM1CPBN,并获取硬盘ID序列号

解决方案 »

  1.   

    不知你說的是不是這個
    http://blog.csdn.net/fwj380891124/article/details/6795088
      

  2.   

    不行呀代码如下:
    string cpuInfo = "";//cpu序列号
    ManagementClass cimobject = new ManagementClass("Win32_Processor");
    ManagementObjectCollection moc = cimobject.GetInstances();
    foreach (ManagementObject mo in moc)
    {
    cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
    this.txtcpu.Text = "cpu序列号:" + cpuInfo.ToString();
    }
    测试如下:
    cpu序列号:BFEBFBFF0001067A
    为什么获取不到这个:0001-067A-BFEB-FBFF-0408-E39D
    ???????????????????????????????????????????????
      

  3.   

    咱们现在要研究的是C#版本的呀
    DELPHI版本的我已会了呀
      

  4.   

    C#  
    IO类中有函数
    到底有什么参数呀???????
      

  5.   

    “硬盘序列号”?你的那个一看就是卷标,可不是什么硬盘序列号啊。卷标随便使用windows就可以设置的,跟硬件信息没有任何关系。
      

  6.   

    0001-067A-BFEB-FBFF-0408-E39D
    不会吧这个不是“硬盘序列号”?
    那我用C#中如何再次读取这个信息呀????
      

  7.   

    至于你说的什么CPU序列号,看起来就更不匹配了。它的格式跟主板序列号还是比较像一些的,跟Intel系列的CPU序列号完全不像,而至于其它系列CPU则完全可能没有序列号(或者同一批产品的序列号完全一样)。
      

  8.   

    你贴的是卷标的话,随便打开命令窗口输入 vol 就能看到。卷标是什么,可以自己搜索一下。
      

  9.   

    嗯,更正一下,不是“卷标”,是“卷序列号”。这是一个DOS/Windows系统分配的逻辑标号,随便使用dos系统命令或者windows系统磁盘管理器就可以设置。
      

  10.   

    别说一半呀,看看我到底那里出错了呀DELPHI编程实现读取如:0001-067A-BFEB-FBFF-0408-E39D
    DELPHI编程实现读取如:6VM1CPBN
    我如何用C#读取这个些信息:
      

  11.   

    上面提到的那个“ 6VM1CPBN”是ST硬盘的序列号,不是卷序列号。
      

  12.   

    噢,
    1)M1CPBN是ST硬盘的序列号2)01-067A-BFEB-FBFF-0408-E39D这是个卷标对要是用C#编程如何读取这些信息呀????
    还请赐教
      

  13.   

    写错了
    01-067A-BFEB-FBFF-0408-E39D
    应该是:
    0001-067A-BFEB-FBFF-0408-E39D
      

  14.   

    本人整理了一些资料与大家分享一下如下:
    C#读取设备网卡的MAC地址和硬盘的卷标号 
    http://blog.csdn.net/donetren/article/details/6497015
    http://dsdm.bokee.com/5264510.html
    http://download.csdn.net/download/enaking/1440233
    http://download.csdn.net/detail/cowely/364678-----1
    http://download.csdn.net/detail/cowely/364457xxxxxxxx5
      

  15.   

    读CPU序列号要用到汇编。c#里面的ManagementClass 这个只是读注册表的一个值。
    http://www.cnblogs.com/cloudstep/archive/2010/01/28/1658770.html
      

  16.   

    首先说明,CPU序列号并不是全球唯一的,以Intel为例,其不同型号的CPU序列号肯定不同,但不保证同型号的CPU序列号也各不相同,但据说P3后都是全球唯一的,一帆风没有详细考证。
    CPU序列号有一个好处就是非常难以修改,至少目前还没听说。将CPU ID 和MAC id 、硬盘id组合起来生成软件序列号,可以大大增加序列号的安全性。(后两者都可以通过软件方法修改)。好了,转入正题,闷头发源码:
    CString CGetCpuIDDlg::GetCPUID()
    {
        CString CPUID;
        unsigned long s1,s2;
        unsigned char vendor_id[]="------------";
        char sel;
        sel='1';
        CString VernderID;
        CString MyCpuID,CPUID1,CPUID2;
        switch(sel)
        {
        case '1':
            __asm{
                xor eax,eax      //eax=0:取Vendor信息
                cpuid    //取cpu id指令,可在Ring3级使用
                mov dword ptr vendor_id,ebx
                mov dword ptr vendor_id[+4],edx
                mov dword ptr vendor_id[+8],ecx
            }
            VernderID.Format("%s-",vendor_id);
            __asm{
                mov eax,01h   //eax=1:取CPU序列号
                xor edx,edx
                cpuid
                mov s1,edx
                mov s2,eax
            }
            CPUID1.Format("%08X%08X",s1,s2);
            __asm{
                mov eax,03h
                xor ecx,ecx
                xor edx,edx
                cpuid
                mov s1,edx
                mov s2,ecx
            }
            CPUID2.Format("%08X%08X",s1,s2);
            break;
        case '2':
            {
                __asm{
                    mov ecx,119h
                    rdmsr
                    or eax,00200000h
                    wrmsr
                }
            }
            AfxMessageBox("CPU id is disabled.");
            break;
        }
        MyCpuID = CPUID1+CPUID2;
        CPUID = MyCpuID;
        return CPUID;
    }以上代码在Windows XP sp2 +intel P4上测试通过,能否在AMD的CPU上测试通过有待验证。
      

  17.   

    再次声明,我用DELPHI中编程用这个参数
    //获取CPUID信息 加载单元 ,GetCPUSerialNumberp
    //--------------------
    uses GetCPUSerialNumberpvar
     ss:string;
    begin
     ss:=GetCPUSerialNumber;
     showmessage('当前CPU信息为:'+ss);
    end;
    获取信息如:0001-067A-BFEB-FBFF-0408-E39D
      

  18.   

    DELPHI编程实现读取如:6VM1CPBN
    下面是获取 硬盘ID
    //获得硬盘序列号
    function GetIdeSerialNumber: pchar;
    const IDENTIFY_BUFFER_SIZE = 512;
    type
       TIDERegs = packed record
         bFeaturesReg: BYTE; // Used for specifying SMART "commands".
         bSectorCountReg: BYTE; // IDE sector count register
         bSectorNumberReg: BYTE; // IDE sector number register
         bCylLowReg: BYTE; // IDE low order cylinder value
         bCylHighReg: BYTE; // IDE high order cylinder value
         bDriveHeadReg: BYTE; // IDE drive/head register
         bCommandReg: BYTE; // Actual IDE command.
         bReserved: BYTE; // reserved for future use. Must be zero.
      end;
      TSendCmdInParams = packed record
        // Buffer size in bytes
        cBufferSize: DWORD;
        // Structure with drive register values.
        irDriveRegs: TIDERegs;
        // Physical drive number to send command to (0,1,2,3).
        bDriveNumber: BYTE;
        bReserved: array[0..2] of Byte;
        dwReserved: array[0..3] of DWORD;
        bBuffer: array[0..0] of Byte; // Input buffer.
      end;
      TIdSector = packed record
        wGenConfig: Word;
        wNumCyls: Word;
        wReserved: Word;
        wNumHeads: Word;
        wBytesPerTrack: Word;
        wBytesPerSector: Word;
        wSectorsPerTrack: Word;
        wVendorUnique: array[0..2] of Word;
        sSerialNumber: array[0..19] of CHAR;
        wBufferType: Word;
        wBufferSize: Word;
        wECCSize: Word;
        sFirmwareRev: array[0..7] of Char;
        sModelNumber: array[0..39] of Char;
        wMoreVendorUnique: Word;
        wDoubleWordIO: Word;
        wCapabilities: Word;
        wReserved1: Word;
        wPIOTiming: Word;
        wDMATiming: Word;
        wBS: Word;
        wNumCurrentCyls: Word;
        wNumCurrentHeads: Word;