如题

解决方案 »

  1.   

    HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
      

  2.   

    这个问题我以前回答过大概的方法就是用一个1秒的定时器,在利用586指令 rdtsc(asm)
    来计算
    我把代码
    .586
    .model flat, stdcall
    option casemap :none   ; case sensitiveinclude windows.inc
    include user32.inc
    include kernel32.inc
    include comctl32.inc
    include comdlg32.incincludelib user32.lib
    includelib kernel32.lib
    includelib comctl32.lib
    includelib comdlg32.libDLG_MAIN equ 1000
    ID_SPEED equ 1001 .data?dwTickCount dd ?
    dwTSC dd ?,?
    hInstance dd ?
    szBuffer db 256 dup (?)_ProcDlgMain PROTO :DWORD,:DWORD,:DWORD,:DWORD .dataszSpeed db "你的CPU主频为 %d MHz",0 .codeinclude Win.asm;********************************************************************
    _ProcDlgMain proc uses ebx edi esi, \
    hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
    local @stPoint:POINT
    local @hWindow mov eax,wMsg
    .if eax == WM_CLOSE
    invoke EndDialog,hWnd,NULL
    invoke KillTimer,hWnd,1
    .elseif eax == WM_INITDIALOG
    invoke _CenterWindow,hWnd
    invoke GetTickCount ;TSC 初始值
    mov dwTickCount,eax rdtsc
    mov dwTSC,eax
    mov dwTSC+4,edx
    invoke SetTimer,hWnd,1,1000,NULL
    .elseif eax == WM_TIMER
    invoke GetTickCount
    push eax
    sub eax,dwTickCount
    pop dwTickCount
    push eax rdtsc
    push edx
    push eax
    sub eax,dwTSC
    sbb edx,dwTSC+4
    pop dwTSC
    pop dwTSC+4 mov ecx,1000000
    div ecx ;除以1Mhz=1000000hz
    .if edx >= 500000h ;四舍五入
    inc eax
    .endif
    mov ecx,1000
    mul ecx ;1秒=1000毫秒
    pop ecx ;pop出经过的毫秒数
    div ecx invoke wsprintf,offset szBuffer,offset szSpeed,eax
    invoke SendDlgItemMessage,hWnd,ID_SPEED,\
    WM_SETTEXT,0,offset szBuffer
    .else
    ;********************************************************************
    ; 注意:对话框的消息处理后,要返回 TRUE,对没有处理的消息
    ; 要返回 FALSE
    ;********************************************************************
    mov eax,FALSE
    ret
    .endif    
    mov eax,TRUE
    ret

    _ProcDlgMain endp
    ;********************************************************************
    start:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0
    invoke ExitProcess,NULL end start