有相关的Api可用,按DbControl所说,也可以去网上查找!

解决方案 »

  1.   

    我将代码抄给你吧:FrmMainOption Explicit
    '********************************************************************************
    '* CPUUsage 1.0
    '* ----------------
    '*
    '* This program is total FREEWARE.
    '*
    '* It use the registry to get the CPU usage in percent.
    '*
    '* You can also move the form without title bar and close it with the right button.
    '*
    '* Happy programming !
    '*
    '*
    '********************************************************************************' The CPUUsage object
    Private CPU As New CPUUsage
    Private Avg As Long                         ' Average of CPU Usage
    Private Sum As Long
    Private Index As LongPrivate Sub Form_Load()
        ' First, open the "StartStat" key
        CPU.InitCPUUsage
    End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        Timer.Enabled = False
        Set CPU = Nothing
        Cancel = 0
    End SubPrivate Sub Frame1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Call Form_MouseDown(Button, Shift, X, Y)
    End SubPrivate Sub pctPrg_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 2 Then
            Unload Me
            End
        End If
        Call Form_MouseDown(Button, Shift, X, Y)
    End SubPrivate Sub Timer_Timer()
        'Get the CPU Usage every second
        Dim tmp As Long
        tmp = CPU.GetCPUUsage
        Sum = Sum + tmp
        Index = Index + 1
        Avg = Int(Sum / Index)
        'Draw the bar
        pctPrg.Cls
        pctPrg.Line (0, 0)-(tmp, 18), , BF
        pctPrg.Line (Avg, 0)-(Avg, 18), &HFF
        pctPrg.Line (Avg + 1, 0)-(Avg + 1, 18), &HFF
    End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim rc As Long
        rc = ReleaseCapture
        rc = SendMessage(hwnd, WM_NCLBUTTONDOWN, LP_HT_CAPTION, ByVal 0&)
    End SubMudula ApiOption Explicit
    'Const&Functions used for the FormMove methods
    Public Const LP_HT_CAPTION = 2
    Public Const WM_NCLBUTTONDOWN = &HA1Declare Function ReleaseCapture Lib "user32" () As Long
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Longcls:CPUUsageOption ExplicitPrivate Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
    Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Const REG_DWORD = 4
    Private Const HKEY_DYN_DATA = &H80000006
    'Initiate the key
    Public Sub InitCPUUsage()
        Dim Data As Long, Typ As Long, Size As Long
        Dim hKey As Long, hRet As Long    hRet = RegOpenKey(HKEY_DYN_DATA, "PerfStats\StartStat", hKey)
        hRet = RegQueryValueEx(hKey, "KERNEL\CPUUsage", 0, REG_DWORD, Data, 4)
        hRet = RegCloseKey(hKey)
    End Sub
    'Get the cpu info via gfx meter
    Public Function GetCPUUsage() As Long
        Dim Data As Long, Typ As Long, Size As Long
        Dim hKey As Long
        Dim hRet As Long    hRet = RegOpenKey(HKEY_DYN_DATA, "PerfStats\StatData", hKey)
        hRet = RegQueryValueEx(hKey, "KERNEL\CPUUsage", 0&, REG_DWORD, Data, 4)
        GetCPUUsage = Data
        hRet = RegCloseKey(hKey)
    End Function
      

  2.   


     这个实在注册表里面去的数值的呀!  我记得 奥莱里 出的一本书里面,可以判断每一个进程占用的cpu时钟比例  但是源代码要配套光盘里面才有,
      我这本书是解图书馆的,没有馆盘
      

  3.   

    z_liming,
    我找到一个用c++的办法,帮你转成vb的,你等着,估计明早就行了
      

  4.   

    巴顿,不行啊,我的是Win2000 Advanced Server,你那个代码我一早试过了。
      

  5.   

    应该是在注册表里,只要定时取键值处理一下就行了。
    那个c++的例子是用sdk写的,他是一个完整的监测机器性能的程序,太大了,我还没能完全看懂。马上要出差了,没时间再仔细研究,我把到目前为止了解到的情况列一下,各位再继续研究吧。1、例子是msdn里带的,叫permon.到1号盘里搜索一下就能找到。2、要找的注册表主键是隐藏的,在nt\2k里是HKEY_PERFORMANCE_DATA, 98里是HKEY_DYN_DATA,具体的项可能是software\microsoft\windows nt\currentversion\perflic,不一定准确!! 大家再仔细研究研究。3、取cpu使用率的做法如下:“% Processor Time 指处理器执行非闲置线程时间的百分比。这个计数器设计成用来作为处理器活动的主要指示器。它通过在每个范例间隔中衡 量处理器用于执行闲置处理线程的时间,并且用 100% 减去该值得出。(每 台处理器有一个闲置线程,该线程在没有其它线程可以运行时消耗周 期)。可将其视为范例间隔用于做有用工作的百分比。这个计数器显 示在范例间隔时所看到的忙时平均值。这个值是用 100% 减去该服务不活 动的时间计算出来的。“    基本上我所了解的就这么多了,希望能帮到你!
      

  6.   

    谁能将下面的自定义结构和api说明翻成VB的,多谢!
    typedef struct
    {
        DWORD  dwUnknown1;
        ULONG  uKeMaximumIncrement;
        ULONG  uPageSize;
        ULONG  uMmNumberOfPhysicalPages;
        ULONG  uMmLowestPhysicalPage;
        ULONG  uMmHighestPhysicalPage;
        ULONG  uAllocationGranularity;
        PVOID  pLowestUserAddress;
        PVOID  pMmHighestUserAddress;
        ULONG  uKeActiveProcessors;
        BYTE    bKeNumberProcessors;
        BYTE    bUnknown2;
        WORD    wUnknown3;
    } SYSTEM_BASIC_INFORMATION;typedef struct
    {
        LARGE_INTEGER  liIdleTime;
        DWORD          dwSpare[76];
    } SYSTEM_PERFORMANCE_INFORMATION;typedef struct
    {
        LARGE_INTEGER liKeBootTime;
        LARGE_INTEGER liKeSystemTime;
        LARGE_INTEGER liExpTimeZoneBias;
        ULONG        uCurrentTimeZoneId;
        DWORD        dwReserved;
    } SYSTEM_TIME_INFORMATION;// NtQuerySystemInformation(
    //    IN UINT SystemInformationClass,    // information type
    //    OUT PVOID SystemInformation,      // pointer to buffer
    //    IN ULONG SystemInformationLength,  // buffer size in bytes
    //    OUT PULONG ReturnLength OPTIONAL  // pointer to a 32-bit
      

  7.   

    type SYSTEM_BASIC_INFORMATION      dwUnknown1 as long
          uKeMaximumIncrement as long
          uPageSize as long 
          uMmNumberOfPhysicalPages as long 
          uMmLowestPhysicalPage as long
          uMmHighestPhysicalPage as long
          uAllocationGranularity as long
          pLowestUserAddress as long
          pMmHighestUserAddress as long
          uKeActiveProcessors as long
          bKeNumberProcessors as byte
          bUnknown2 as byte
          wUnknown3 as long
    End Typetype SYSTEM_PERFORMANCE_INFORMATION    liIdleTime as LARGE_INTEGER  
        dwSpare(76)  as long
    End Typetype SYSTEM_TIME_INFORMATION     liKeBootTime  as LARGE_INTEGER
         liKeSystemTime as LARGE_INTEGER
         liExpTimeZoneBias as LARGE_INTEGER;
         uCurrentTimeZoneId as long
         dwReserved as long
    end typeDeclare sub NtQuerySystemInformation lib "NtDll.dll"(SystemInformationClass as long, _
    SystemInformation as long, _
    SystemInformationLength as long, _
    Byval SystemInformationLength as long, _
    OPTIONAL ReturnLength as long)