“实时错误 '453' 找不到DLL入口点 Shell_NotifyIconA in shell32.dll”怎么解决?

hdwlinux 2001-11-22 07:47:27
在一个程序里提示这么一个信息,我该怎么办?望各位大侠指教!
...全文
309 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
TechnoFantasy 2001-11-25
  • 打赏
  • 举报
回复
可以运行,但是你的程序只能在98下运行,2000下不但无法得到系统cpu信息,而且会不断弹出 无法获得cpu信息 的提示,我都无法关闭。
hdwlinux 2001-11-25
  • 打赏
  • 举报
回复
to TechnoFantasy
我的那个程序在你那里调试成功了吗,为什么在我这里还不可以?
我已经按照你的做了。
foolishtiger 2001-11-23
  • 打赏
  • 举报
回复
http://www.csdn.net/oldexpert/topicview1.asp
TechnoFantasy 2001-11-23
  • 打赏
  • 举报
回复
SetWindowPos函数你少写了一个参数,正确的调用如下:
Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE)
bear88 2001-11-22
  • 打赏
  • 举报
回复
可以了,我搞错了,不好意思,呵呵
bear88 2001-11-22
  • 打赏
  • 举报
回复
我试了一下,似乎不行.
bear88 2001-11-22
  • 打赏
  • 举报
回复
我也碰到同样问题,关注...
mhtdragon 2001-11-22
  • 打赏
  • 举报
回复
应该是这个,API VIEW定义的不能用。返回的为Boolean, 不是long
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, Daa As NOTIFYICONDATA) As Boolean

hdwlinux 2001-11-22
  • 打赏
  • 举报
回复
to : uguess(uguess)
能知道你是用什么查看吗?
谢谢!
hdwlinux 2001-11-22
  • 打赏
  • 举报
回复
to : TechnoFantasy(www.applevb.com) 
太谢谢了!
不过,现在又遇到问题了.
为什么在WindowsOnTop()中又出了点小问题呀?提示SetWindowPos(FrmMain.hWnd, HWND_TOPMOST, 0, 0, 0, SWP_NOSIZE)参数不可选,为什么?
谢谢前面各位兄弟的帮助!
uguess 2001-11-22
  • 打赏
  • 举报
回复

哇,还是TechnoFantasy(www.applevb.com) 厉害,幸好我从来不用API Viewer。
uguess 2001-11-22
  • 打赏
  • 举报
回复

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

TechnoFantasy 2001-11-22
  • 打赏
  • 举报
回复
老问题了,这是API Viewer中的Bug,注意下面:
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Alias后面的" Shell_NotifyIconA"多了一个空格,删除空格就可以了。
uguess 2001-11-22
  • 打赏
  • 举报
回复
就是说你引用的这个函数没有包含在shell.dll中!(NT下这个函数是没有的)
hdwlinux 2001-11-22
  • 打赏
  • 举报
回复
哦,那个程序现贴在下面了!
在窗体中:
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 Long

Private Sub Exit_Click()
End
End Sub

Private 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 Sub

Private 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 Select

End Sub

Private Sub Form_Unload(Cancel As Integer)
Shell_NotifyIcon NIM_DELETE, nid '系统退出时,清除系统区的托盘图标
End Sub

Private Sub HideWindow_Click()
FrmMain.Hide

End Sub

Private Sub ShowWindow_Click()
FrmMain.Show

End Sub

Private 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 Sub

Private 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 Sub

Private 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 Explicit

Public 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 = &H205

Global 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



非常感谢各位的高见!
我一定尽全力,多给分的!
'窗体:______________ '声明:Public LastState As Integer '为图标定义窗体信息 '使用前: 'If WindowState = vbMinimized Then ' LastState = vbNormal 'Else ' LastState = WindowState 'End If '使用: 'AddToTray Me, mnuTray '加载图标 'SetTrayTip "VB Helper tray icon program" '图标标签 'RemoveFromTray'卸载图标 '模板:_________ Option Explicit Public OldWindowProc As Long Public TheForm As Form Public TheMenu As Menu Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long Public Const WM_USER = &H400 Public Const WM_LBUTTONUP = &H202 Public Const WM_MBUTTONUP = &H208 Public Const WM_RBUTTONUP = &H205 Public Const TRAY_CALLBACK = (WM_USER + 1001&) Public Const GWL_WNDPROC = (-4) Public Const GWL_USERDATA = (-21) Public Const NIF_ICON = &H2 Public Const NIF_TIP = &H4 Public Const NIM_ADD = &H0 Public Const NIF_MESSAGE = &H1 Public Const NIM_MODIFY = &H1 Public Const NIM_DELETE = &H2 Public Type NOTIFYICONDATA cbSize As Long hwnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 64 End Type Private TheData As NOTIFYICONDATA ' ********************************************* ' The replacement window proc. ' ********************************************* Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = TRAY_CALLBACK Then ' The user clicked on the tray icon. ' Look for click events. If lParam = WM_LBUTTONUP Then '左击 ' On left click, show the form. If TheForm.WindowState = vbMinimized Then _ TheForm.WindowState = TheForm.LastState TheForm.SetFocus Exit Function End If If lParam = WM_RBUTTONUP Then '右 ' On right click, show the menu. TheForm.PopupMenu TheMenu Exit Function End If End If ' Send other messages to the original ' window proc. NewWindowProc = CallWindowProc( _ OldWindowProc, hwnd, Msg, _ wParam, lParam) End Function ' ********************************************* ' Add the form's icon to the tray. ' ********************************************* Public Sub AddToTray(frm As Form, mnu As Menu) ' ShowInTaskbar must be set to False at ' design time because it is read-only at ' run time. ' Save the form and menu for later use. Set TheForm = frm Set TheMenu = mnu ' Install the new WindowProc. OldWindowProc = SetWindowLong(frm.hwnd, _ GWL_WNDPROC, AddressOf NewWindowProc) ' Install the form's icon in the tray. With TheData .uID = 0 .hwnd = frm.hwnd .cbSize = Len(TheData) .hIcon = frm.Icon.Handle .uFlags = NIF_ICON .uCallbackMessage = TRAY_CALLBACK .uFlags = .uFlags Or NIF_MESSAGE .cbSize = Len(TheData) End With Shell_NotifyIcon NIM_ADD, TheData End Sub ' ********************************************* ' Remove the icon from the system tray. ' ********************************************* Public Sub RemoveFromTray() ' Remove the icon from the tray. With TheData .uFlags = 0 End With Shell_NotifyIcon NIM_DELETE, TheData ' Restore the original window proc. SetWindowLong TheForm.hwnd, GWL_WNDPROC, _ OldWindowProc End Sub ' ********************************************* ' Set a new tray tip. ' ********************************************* Public Sub SetTrayTip(tip As String) With TheData .szTip = tip & vbNullChar .uFlags = NIF_TIP End With Shell_NotifyIcon NIM_MODIFY, TheData End Sub ' ********************************************* ' Set a new tray icon. ' ********************************************* Public Sub SetTrayIcon(pic As Picture) ' Do nothing if the picture is not an icon. If pic.Type <> vbPicTypeIcon Then Exit Sub ' Update the tray icon. With TheData .hIcon = pic.Handle .uFlags = NIF_ICON End With Shell_NotifyIcon NIM_MODIFY, TheData End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧