哪位高手帮忙把下面这个程序(获取cpu id)改写成为,控制台程序(像DOS命令可直接调用,直接返回DOS).谢谢.一定给分...//-----------------------------------------网络源程序部分--------------------
第一个函数我试过,可以得到CPU序列号
没有问题,你可以用一用,是别人给我的。
得CPU ID:
type
  TCPUID  = array[1..4] of Longint;
...
function GetCPUID : TCPUID; assembler; register;
asm
  PUSH    EBX
  PUSH    EDI
  MOV    EDI,EAX
  MOV    EAX,1
  DW      $A20F
  STOSD
  MOV    EAX,EBX
  STOSD
  MOV    EAX,ECX
  STOSD
  MOV    EAX,EDX
  STOSD
  POP    EDI
  POP    EBX
end;function GetCPUSpeed: Double;
const DelayTime = 100;
var
  TimerHi, TimerLo: DWORD;
  PriorityClass, Priority: Integer;
begin
  PriorityClass := GetPriorityClass(GetCurrentProcess);
  Priority := GetThreadPriority(GetCurrentThread);
  SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
  SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
  Sleep(DelayTime);
  asm
    DW  310FH
    MOV TimerLo, EAX
    MOV TimerHi, EDX
  end;
  Sleep(DelayTime);
  asm
    DW  310FH
    SUB EAX, TimerLo
    SBB EDX, TimerHi
    MOV TimerLo, EAX
    MOV TimerHi, EDX
  end;
  SetThreadPriority(GetCurrentThread, Priority);
  SetPriorityClass(GetCurrentProcess, PriorityClass);
  Result := TimerLo / (1000.0 * DelayTime);
end; 

解决方案 »

  1.   

    自己New一个Console按照Pascal写就搞定,最简单的
    writeln(GetCPUSpeed);
      

  2.   

    看来这30分该我得了,看代码:program Project2;{$APPTYPE CONSOLE}uses
      SysUtils,
      Windows;  //注意,要加入这个文件type
      TCPUID = array[1..4] of Longint;function GetCPUID: TCPUID; assembler; register;
    asm
        PUSH         EBX
        PUSH         EDI
        MOV         EDI,EAX
        MOV         EAX,1
        DW             $A20F
        STOSD
        MOV         EAX,EBX
        STOSD
        MOV         EAX,ECX
        STOSD
        MOV         EAX,EDX
        STOSD
        POP         EDI
        POP         EBX
    end;function GetCPUSpeed: Double;
    const
      DelayTime = 100;
    var
      TimerHi, TimerLo: DWORD;
      PriorityClass, Priority: Integer;
    begin
      PriorityClass := GetPriorityClass(GetCurrentProcess);
      Priority := GetThreadPriority(GetCurrentThread);
      SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
      SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
      Sleep(DelayTime);
      asm
            DW     310FH
            MOV   TimerLo,   EAX
            MOV   TimerHi,   EDX
      end;
      Sleep(DelayTime);
      asm
            DW     310FH
            SUB   EAX,   TimerLo
            SBB   EDX,   TimerHi
            MOV   TimerLo,   EAX
            MOV   TimerHi,   EDX
      end;
      SetThreadPriority(GetCurrentThread, Priority);
      SetPriorityClass(GetCurrentProcess, PriorityClass);
      Result := TimerLo / (1000.0 * DelayTime);
    end;begin
      { TODO -oUser -cConsole Main : Insert code here }
      Writeln(GetCPUSpeed);
      Writeln(GetCPUID[1]);
      Writeln(GetCPUID[2]);
      Writeln(GetCPUID[3]);
      Writeln(GetCPUID[4]);
      readln;
    end.
      

  3.   

    你是想要输入某个命令如输入:cpuid,然后回车,回车后显示出CPU的ID是把?
      

  4.   

    下面够详细了,希望你能看懂:program Project2;{$APPTYPE CONSOLE}uses
      SysUtils, StrUtils,
      Windows; //注意,要加入这个文件type
      //CPUID  一共有4组,4组连接成串是世界唯一的,常用于软件注册
      TCPUID = array[1..4] of Longint;function GetCPUID: TCPUID; assembler; register;
    asm
        PUSH         EBX
        PUSH         EDI
        MOV         EDI,EAX
        MOV         EAX,1
        DW             $A20F
        STOSD
        MOV         EAX,EBX
        STOSD
        MOV         EAX,ECX
        STOSD
        MOV         EAX,EDX
        STOSD
        POP         EDI
        POP         EBX
    end;function GetCPUSpeed: Double;
    const
      DelayTime = 100;
    var
      TimerHi, TimerLo: DWORD;
      PriorityClass, Priority: Integer;
    begin
      PriorityClass := GetPriorityClass(GetCurrentProcess);
      Priority := GetThreadPriority(GetCurrentThread);
      SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
      SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
      Sleep(DelayTime);
      asm
            DW     310FH
            MOV   TimerLo,   EAX
            MOV   TimerHi,   EDX
      end;
      Sleep(DelayTime);
      asm
            DW     310FH
            SUB   EAX,   TimerLo
            SBB   EDX,   TimerHi
            MOV   TimerLo,   EAX
            MOV   TimerHi,   EDX
      end;
      SetThreadPriority(GetCurrentThread, Priority);
      SetPriorityClass(GetCurrentProcess, PriorityClass);
      Result := TimerLo / (1000.0 * DelayTime);
    end;var
      sCmd: string;
      i:integer;
      label here;
    begin
      { TODO -oUser -cConsole Main : Insert code here }
      Writeln('你可以选择一下命令输入:');
      Writeln('cpuspd  返回本机CPU的速度');
      Writeln('cpuid -n/a 返回本机CPU的速度,参数n为1到4的整数,参数a返回全部CPU的ID');
      Writeln('exit 退出程序');
      here:
      Readln(sCmd);
      if Trim(sCmd)='exit' then Exit;
      if Trim(sCmd)='cpuspd' then Writeln(GetCPUSpeed)
      else
      if (LeftStr(TrimLeft(sCmd),8)='cpuid -a') then
        Writeln(inttostr(GetCPUID[1])+inttostr(GetCPUID[2])+inttostr(GetCPUID[3])+inttostr(GetCPUID[4]))
      else
        if (LeftStr(TrimLeft(sCmd),7)='cpuid -') then
        begin
           TryStrToInt(RightStr(Trim(sCmd),1),i);
           if (i>=1) and (i<=4) then Writeln(GetCPUID[i])
           else Writeln(sCmd+'不是合法命令!');
        end
        else
          Writeln(sCmd+'不是合法命令!');
      goto here;
    end.