能给代码吗?不胜感谢.

解决方案 »

  1.   

    hubdog编程技巧中有获得Intel CPU的信息
    下面这个函数会返回一个字符串列表及特性集合,这个函数只对Intel 486及以上的CPU有效。其他CPU将返回[cpuNonIntel] 或 [cpuNoCPUID].用法:GetCpuFeatures(memo1.Lines);支持的特性
    ---------------------------------------
    CPU Family 6
    CPU Model 7
    CPU Stepping 3
    On-Chip FPU
    VirtualMode Extensions
    Debugging Extensions
    Page Size Extensions
    Time Stamp Counter
    Model Specific Registers
    Physical Address Extensions
    Machine Check Extensions
    CMPXCHG8B Instruction
    Fast System Call
    Memory Type Range Registers
    Page Global Enable
    Machine Check Architecture
    Conditional Move Instruction
    Page Attribute Table
    32 Bit Page Size Extension
    Intel MMX Technology
    Fast Floating Point Save and Restore
    Streaming SIMD Extensionsunit Unit2;
    interface
    uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;type
      TForm2 = class(TForm)
      private
      { Private declarations }
      public
      { Public declarations }   end;  TCpuFeature = (cpuNoCPUID,cpuNonIntel,cpuOnChipFPU,
      cpuVirtualModeExtensions,cpuDebuggingExtensions,
      cpuPageSizeExtensions,cpuTimeStampCounter,
      cpuModelSpecificRegisters,cpuPhysicalAddressExtensions,
      cpuMachineCheckExtensions,cpuCMPXCHG8B,cpuOnChipAPIC,
      cpuFastSystemCall,cpuMemoryRangeRegisters,cpuPageGlobalEnable,
      cpuMachineCheckArchitecture,cpuConditionalMoveInstruction,
      cpuPageAttributeTable,cpu32bitPageSzExtension,
      cpuProcessorSerialNum,cpuMMXTechnology,cpuFastFloatingPoint,
      cpuSIMDExtensions);  TCpuFeatures = set of TCpuFeature;  function GetCpuFeatures(FeatureList : TStrings = nil) : TCpuFeatures;var Form2: TForm2;
    implementation
    {$R *.DFM}function GetCpuFeatures(FeatureList : TStrings = nil) : TCpuFeatures;
    const
      FPU_FLAG = $0001;
      VME_FLAG = $0002;
      DE_FLAG = $0004;
      PSE_FLAG = $0008;
      TSC_FLAG = $0010;
      MSR_FLAG = $0020;
      PAE_FLAG = $0040;
      MCE_FLAG = $0080;
      CX8_FLAG = $0100;
      APIC_FLAG = $0200;
      SEP_FLAG = $0800;
      MTRR_FLAG = $1000;
      PGE_FLAG = $2000;
      MCA_FLAG = $4000;
      CMOV_FLAG = $8000;
      PAT_FLAG = $10000;
      PSE36_FLAG = $20000;
      PSNUM_FLAG = $40000;
      MMX_FLAG = $800000;
      FXSR_FLAG = $1000000;
      SIMD_FLAG = $2000000;var IsIntel : boolean;
      VendorID : array [0..12] of char;
      IntelID : array [0..12] of char;
      FeaturesFlag,CpuSignature : DWord;
      Temp : DWord;
      RetVar : TCpuFeatures;
      CpuType : byte;  procedure CheckFeature(FeatureFlag : DWord;
      const Item : string;
      cpuFeatureType : TCpuFeature);
      begin
      if FeaturesFlag and FeatureFlag = FeatureFlag then begin
      if FeatureList <> nil then FeatureList.Add(Item);
      include(RetVar,cpuFeatureType);
      end;
      end;begin
      RetVar := [];
      if FeatureList <> nil then FeatureList.Clear;
      IsIntel := false;
      IntelId := 'GenuineIntel'#0;
      VendorID := '------------'#0;  try
      asm  //确认是否支持Intel CPUID调用
      push ebx
      push esi
      push edi
      mov eax,0 // Set up for CPUID instruction
      db 00fh // CPUID - Get Vendor and check INTEL
      db 0a2h
      mov dword ptr VendorId,ebx
      mov dword ptr VendorId[+4],edx
      mov dword ptr VendorId[+8],ecx
      cmp dword ptr IntelId,ebx //检查是否是Intel CPU
      jne @@EndCPUID
      cmp dword ptr IntelId[+4],edx
      jne @@EndCPUID
      cmp dword ptr IntelId[+8],ecx
      jne @@EndCPUID // 非Intel CPU  mov byte ptr IsIntel,1 // Set IsIntel to true
      cmp eax,1 // Ensure 1 is valid input for CPUID
      jl @@EndCPUID // Else jump to end  mov eax,1
      db 00fh // CPUID - Get features,family etc.
      db 0a2h
      mov CpuSignature,eax
      mov FeaturesFlag,edx
      shr eax,8 // Isolate family
      and eax,0fh
      mov byte ptr CpuType,al // Set cputype with family  @@EndCPUID :  pop edi // 恢复寄存器
      pop esi
      pop ebx
      end;  // 检查特性掩码
      if IsIntel then begin
      if FeatureList <> nil then begin
      FeatureList.Add('CPU Family ' + IntToStr(CpuType));
      Temp := (CpuSignature shr 4) and $0f;
      FeatureList.Add('CPU Model ' + IntToStr(Temp));
      Temp := CpuSignature and $0f;
      FeatureList.Add('CPU Stepping ' + IntToStr(Temp));
      end;  CheckFeature(FPU_FLAG,'On-Chip FPU',cpuOnChipFPU);
      CheckFeature(VME_FLAG,
      'VirtualMode Extensions',cpuVirtualModeExtensions);
      CheckFeature(DE_FLAG,'Debugging Extensions',cpuDebuggingExtensions);
      CheckFeature(PSE_FLAG,'Page Size Extensions',cpuPageSizeExtensions);
      CheckFeature(TSC_FLAG,'Time Stamp Counter',cpuTimeStampCounter);
      CheckFeature(MSR_FLAG,
      'Model Specific Registers',cpuModelSpecificRegisters);
      CheckFeature(PAE_FLAG,
      'Physical Address Extensions',
      cpuPhysicalAddressExtensions);
      CheckFeature(MCE_FLAG,
      'Machine Check Extensions',cpuMachineCheckExtensions);
      CheckFeature(CX8_FLAG,'CMPXCHG8B Instruction',cpuCMPXCHG8B);
      CheckFeature(APIC_FLAG,'On Chip APIC',cpuOnChipAPIC);
      CheckFeature(SEP_FLAG,'Fast System Call',cpuFastSystemCall);
      CheckFeature(MTRR_FLAG,
      'Memory Type Range Registers',cpuMemoryRangeRegisters);
      CheckFeature(PGE_FLAG,'Page Global Enable',cpuPageGlobalEnable);
      CheckFeature(MCA_FLAG,
      'Machine Check Architecture',cpuMachineCheckArchitecture);
      CheckFeature(CMOV_FLAG,
      'Conditional Move Instruction',
      cpuConditionalMoveInstruction);
      CheckFeature(PAT_FLAG,'Page Attribute Table',cpuPageAttributeTable);
      CheckFeature(PSE36_FLAG,
      '32 Bit Page Size Extension',cpu32BitPageSzExtension);
      CheckFeature(PSNUM_FLAG,
      'Processor Serial Number',cpuProcessorSerialNum);
      CheckFeature(MMX_FLAG,'Intel MMX Technology',cpuMMXTechnology);
      CheckFeature(FXSR_FLAG,
      'Fast Floating Point Save and Restore',
      cpuFastFloatingPoint);
      CheckFeature(SIMD_FLAG,'Streaming SIMD Extensions',cpuSIMDExtensions);
      end
      else begin
      if FeatureList <> nil then
      FeatureList.Add('Non-Intel or >486 Chip - Features Unknown');
      include(RetVar,cpuNonIntel);
      end;
      except
      if FeatureList <> nil then FeatureList.Add('No CPUID Support');
      include(RetVar,cpuNoCPUID);
      end;  Result := RetVar;
    end;end.
      

  2.   

    获取主板的工业序列号完全可以实现,注意是硬盘外壳上的序列号,不是格式化后的序列 
    号,C语言源程序如下(注:该程序由顶尖高手丁凯所写):#include <windows.h>#include <stdio.h>WORD pw[256];static DWORD idt, int_idt;static DWORD Base;static WORD Entry;#pragma warning (disable:4035)static int inp(WORD rdx){_asm xor eax, eax_asm mov dx, rdx_asm in al, dx}static WORD inpw(WORD rdx){_asm xor eax, eax_asm mov dx, rdx_asm in ax, dx}static void outp(WORD rdx, int ral){_asm mov dx, rdx_asm mov eax, ral_asm out dx, al}static int WaitIde(){int al;while ((al=inp(0x1F7))>=0x80) ;return al;}static void ReadIDE(){int al;int i;WaitIde();outp(0x1F6,0xA0);al = WaitIde();if ((al&0x50)!=0x50) return;outp(0x1F6,0xA0);outp(0x1F7,0xEC);al = WaitIde();if ((al&0x58)!=0x58) return;for (i=0;i<256;i++) {pw[i] = inpw(0x1F0);}}static void __declspec( naked ) NowInRing0(){_asm {push ebpmov ebp,espcall ReadIDEclimov ebx, int_idtmov ax, Entrymov word ptr [ebx-4], axmov eax, Baseshr eax, 16mov [ebx+2], axstileaveiretd}}void GetIDEInfo(){DWORD dwExcept;dwExcept = (DWORD)NowInRing0;_asm {mov eax, fs:[0]push eaxsidt [esp-02h]pop ebxmov idt, ebxadd ebx, 0x1Cmov int_idt, ebxmov eax, [ebx]mov [Base], eaxmov ax, [ebx-4]mov [Entry], axclimov esi, dwExceptpush esimov [ebx-4], sishr esi, 16mov [ebx+2], sipop esistiint 3}}main(){char s[80];register i,j;GetIDEInfo();for (i=0,j=0;i<10;i++) {s[j++]=pw[10+i]>>8;s[j++]=pw[10+i]&0xFF;}s[j] = 0;printf("Serial=%s", s);return 0;}
      

  3.   

    取Cpu的序号,代码如下:procedure TForm1.Button1Click(Sender: TObject);
    var
      R: array[0..19] of Char;
      CpuID: Integer;
    begin
      FillChar(R, 20, 0);
      asm
        mov eax, 0
        db 0fh, 0a2h
        mov dword ptr R[0],  ebx
        mov dword ptr R[4],  edx
        mov dword ptr R[8],  ecx
        mov eax, 1
        db 0fh, 0a2h               // cpuid
        mov CpuID, edx
      end;
      ShowMessage('CPU制造商为:' + R);
      ShowMessage('序列号为:' + IntToStr(CpuID));
    end;