为什么不能调用API?

xzm2000 2000-10-11 10:34:00
各位大虾,小弟我有一个问题想请教,为什么我在VB中不能调用Shell_NotifyIcon这个API函数,我用API浏览器做的声明,定义为Public,放在标准模块中,在程序中,我用
Shell_NotifyIcon调用就出现找不到dll错误,用Shell_NotifyIconA就出现函数未定义错。不知是怎么回事,我用的是WIN98第一版,VB6,请各位大虾救救小弟呀!
...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolishtiger 2000-10-16
  • 打赏
  • 举报
回复
哈哈!!
你的错误是:在
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

这句话里,Alias "Shell_NotifyIconA" 中的 Shell_NotifyIconA 和前面一个引号中间多打了一个空格,你的程序我调试过了,没有其它问题。
CoolHg 2000-10-13
  • 打赏
  • 举报
回复
对于API函数的实际外部显示可能与API参考里的不一样,最好是直接查看DLL库,比如VS里的Depends.exe工具就可以查看到真正的API输入原型,我看了一下你要的函数,里面有三种输入原型,如下,
Shell_NotifyIcon
Shell_NotifyIconA
Shell_NotifyIconW
我对VB不熟,不过在VC里一般是用第一个,也可以一个一个的试过来
xzm2000 2000-10-13
  • 打赏
  • 举报
回复
还是不能调用,我把源程序附上。这个程序是把一个
应用程序最小化到右下角的系统托盘区。
这是在FORM1中:
Option Explicit
Private Sub Form_Load()
With Me
.Top = -10000
.Left = -10000
.WindowState = vbMinimized
End With
With nidProgramData
.cbSize = Len(nidProgramData)
.hwnd = Me.hwnd
.uid = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = "xzm" & vbNullChar
End With
Shell_NotifyIconA NIM_ADD, nidProgramData
“用这个就出现函数未定义错误,如果用
Shell_NotifyIcon NIM_ADD,nidProgramData
的话,就出现找不到dll入口错”
End Sub
还有一些不关紧要的没写。

这是在标准模块中:
Option Explicit

Public Const WM_MOUSEISMOVING = &H200
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206
Public Const WM_SETHOTKEY = &H32

Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
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
Public Enum enm_NIM_Shell
NIM_ADD = &H0
NIM_MODIFY = &H1
NIM_DELETE = &H2
NIF_MESSAGE = &H1
NIF_ICON = &H2
NIF_TIP = &H4
WM_MOUSEMOVE = &H200
“这些参数我都不知道事什么意思,不知哪儿有这些资料,请各位大虾
指点小弟一下”
End Enum
Public nidProgramData As NOTIFYICONDATA

另外还有一些API也会出现这种情况,比如说
SetLayeredWindowAttributes
CheckRadioButtoh
这到底是怎么回事呀?谁能帮帮我呀?
OUYAN 2000-10-11
  • 打赏
  • 举报
回复
你可以在模块里定义。
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

'模块代码:
Type NOTIFYICONDATA 'lpData参数是一个结构类型。
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
。。。。。。。。。。。。。略

1,486

社区成员

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

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