哦,那个程序现贴在下面了!
在窗体中:
Option Explicit
Private Const REG_DWORD = 4
Private Const HKEY_DYN_DATA = &H80000006
Private 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         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
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 LongPrivate Sub Exit_Click()
End
End SubPrivate Sub Form_Load()
If App.PrevInstance Then  '判断是否有同一个程序实例已运行
   End
End If
nid.cbSize = Len(nid)
nid.hWnd = FrmMain.hWnd
nid.uld = vbNull
nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
nid.uCallBackMessage = WM_MOUSEMOVE
nid.hIcon = FrmMain.Icon
nid.szTip = "CPU情况查看器" & vbNullChar
Shell_NotifyIcon NIM_ADD, nid  '将托盘图标加入系统区中
 Call InitCPU '初始化CPU查看器
 Call WindowsOnTop '使该程序窗口总是在其他程序窗口之上
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim msg As Long
On Error Resume Next
msg = X / Screen.TwipsPerPixelX
Select Case msg         '处理系统区图标的鼠标点击事件
   Case WM_RBUTTONDOWN '右键单击
   Case WM_RBUTTONUP
   PopupMenu Popmenu
   Case WM_LBUTTONDBLCLK '左键双击
   FrmMain.Show
End SelectEnd SubPrivate Sub Form_Unload(Cancel As Integer)
Shell_NotifyIcon NIM_DELETE, nid  '系统退出时,清除系统区的托盘图标
End SubPrivate Sub HideWindow_Click()
FrmMain.HideEnd SubPrivate Sub ShowWindow_Click()
FrmMain.ShowEnd SubPrivate Sub Timer1_Timer()
Dim lData As Long, lType As Long, lSize As Long
Dim hKey As Long
Dim hh As Long, qry As Variant'打开注册键
qry = RegOpenKey(HKEY_DYN_DATA, "perfstats\stadata", hKey)
If qry <> 0 Then
  MsgBox "不能获取CPU状况的注册信息"
  Unload Me
End If
lType = REG_DWORD
lSize = 4
'从注册表中查询CPU使用情况,并且显示在窗口中
qry = RegQueryValueEx(hKey, "kernel\cpuusage", 0, lType, lData, lSize)
Me.lable1.Caption = "CPU使用情况:" & Str(lData) & "%" & vbNullChar
qry = RegCloseKey(hKey)
With nid
.szTip = "CPU使用情况:" & Str(lData) & "%" & vbNullChar '更改提示信息
.cbSize = Len(nid)
End With
hh = Shell_NotifyIcon(NIM_MODIFY, nid) '修改托盘图标的某些特征
End SubPrivate Sub WindowsOnTop()
'该子程序使用本窗口显示在最上面
Const SWP_NOSIZE = &H1
Const HWND_TOPMOST = -1
If SetWindowPos(FrmMain.hWnd, HWND_TOPMOST, 0, 0, 0, SWP_NOSIZE) = True Then
   SUCCESS% = SetWindowPos(FrmMain.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE)
End If
End SubPrivate Sub InitCPU()
Dim lData As Long, lType As Long, lSize As Long
Dim hKey As Long, qry As Variant
qry = RegOpenKey(HKEY_DYN_DATA, "perstats\startstat", hKey)
If qry <> 0 Then
   MsgBox "不能获取CPU状况的注册信息"
   Unload Me
End If
lType = REG_DWORD
lSize = 4
qry = RegQueryValueEx(hKey, "kernel\cpuusage", 0, lType, lData, lSize)
qry = RegCloseKey(hKey)
End Sub
在模块中的:
Option ExplicitPublic Type NOTIFYICONDATA   '定义创建托盘图标所需的结构
  cbSize As Long
  hWnd As Long
  uld As Long
  uFlags As Long
  uCallBackMessage As Long
  hIcon As Long
  szTip As String * 64
End Type'定义使用托盘图标所需的常数
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H203
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4'定义鼠标按键的各种值
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONDBLCLK = &H206
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205Global nid As NOTIFYICONDATA  '定义一种结构变量
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long非常感谢各位的高见!
我一定尽全力,多给分的!

解决方案 »

  1.   

    就是说你引用的这个函数没有包含在shell.dll中!(NT下这个函数是没有的)
      

  2.   

    老问题了,这是API Viewer中的Bug,注意下面:
    Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As LongAlias后面的" Shell_NotifyIconA"多了一个空格,删除空格就可以了。
      

  3.   


     错啦错啦,刚刚查了一下,这个函数的应用范围是:
    Requires Windows NT 4.0 or later; Requires Windows 95 or later
      如果你的平台符合上面的要求,我就不知道啦。
      

  4.   


      哇,还是TechnoFantasy(www.applevb.com) 厉害,幸好我从来不用API Viewer。
      

  5.   

    to : TechnoFantasy(www.applevb.com) 
    太谢谢了!
    不过,现在又遇到问题了.
    为什么在WindowsOnTop()中又出了点小问题呀?提示SetWindowPos(FrmMain.hWnd, HWND_TOPMOST, 0, 0, 0, SWP_NOSIZE)参数不可选,为什么?
    谢谢前面各位兄弟的帮助!
      

  6.   

    to : uguess(uguess)
    能知道你是用什么查看吗?
    谢谢!
      

  7.   

    应该是这个,API VIEW定义的不能用。返回的为Boolean, 不是long
    Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, Daa As NOTIFYICONDATA) As Boolean
      

  8.   

    SetWindowPos函数你少写了一个参数,正确的调用如下:
        Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE)
      

  9.   

    http://www.csdn.net/oldexpert/topicview1.asp
      

  10.   

    to TechnoFantasy
    我的那个程序在你那里调试成功了吗,为什么在我这里还不可以?
    我已经按照你的做了。
      

  11.   

    可以运行,但是你的程序只能在98下运行,2000下不但无法得到系统cpu信息,而且会不断弹出 无法获得cpu信息 的提示,我都无法关闭。