在CSDN找到的源码,但气泡提示显示时间不知道怎么用
我用m_oNotifyIconData.uTimeout=1不行,源码见下:
Option Explicit
'系统托盘
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
'---------- dwMessage可以是以下NIM_ADD、NIM_DELETE、NIM_MODIFY 标识符之一----------
Private Const NIM_ADD = &H0 '在任务栏中增加一个图标
Private Const NIM_DELETE = &H2 '删除任务栏中的一个图标
Private Const NIM_MODIFY = &H1 '修改任务栏中个图标信息Private Const NIF_MESSAGE = &H1 'NOTIFYICONDATA结构中uFlags的控制信息
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const NIF_STATE = &H8
Private Const NIF_INFO = &H10
Private Const NIIF_NONE = &H0   '气泡提示类型
Private Const NIIF_WARNING = &H2
Private Const NIIF_ERROR = &H3
Private Const NIIF_INFO = &H1
Private Const NIIF_GUID = &H4Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
'系统托盘类型
Private Type NOTIFYICONDATA
    cbSize As Long '该数据结构的大小
    hwnd As Long '处理任务栏中图标的窗口句柄
    uID As Long '定义的任务栏中图标的标识
    uFlags As Long '任务栏图标功能控制,可以是以下值的组合(一般全包括)
'   NIF_MESSAGE 表示发送控制消息;
'   NIF_ICON表示显示控制栏中的图标;
'   NIF_TIP表示任务栏中的图标有动态提示。
    uCallbackMessage As Long '任务栏图标通过它与用户程序交换消息,处理该消息的窗口由hWnd决定
    hIcon As Long '任务栏中的图标的控制句柄
    szTip As String * 128 '图标的提示信息。若要产生气泡提示信息,则一定要128才性,为64则无法生成气泡,其它功能都正常,原因不明
    
    '气泡提示信息部分
    dwState As Long
    dwStateMask As Long
    szInfo As String * 256               '气泡提示内容
    uTimeout As Long                     '气泡提示显示时间
    szInfoTitle As String * 64           '气泡提示标题
    dwInfoFlags As Long                  '气泡提示类型,见 NIIF_*** 部分
End Type
'系统托盘变量
Private m_oNotifyIconData As NOTIFYICONDATAPrivate Sub command1_Click()
    If Len(Text1.Text) > 128 Then
        MsgBox "系统托盘气泡提示文字不得超过128个字符!"
        Exit Sub
    End If
    m_oNotifyIconData.szInfoTitle = "提示" & Chr(0)
    m_oNotifyIconData.szInfo = Text1.Text & Chr(0)
    Shell_NotifyIcon NIM_MODIFY, m_oNotifyIconData
End SubPrivate Sub Form_Load()
    '生成系统托盘图标
    With m_oNotifyIconData
        .cbSize = Len(m_oNotifyIconData)
        .hwnd = Me.hwnd
        .uID = 0
        .uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP
        .uCallbackMessage = WM_LBUTTONDOWN
        .hIcon = Me.Icon
        .szTip = Me.Caption & vbNullChar
    End With
    Shell_NotifyIcon NIM_ADD, m_oNotifyIconData
End SubPrivate Sub Form_Unload(Cancel As Integer)
    Shell_NotifyIcon NIM_DELETE, m_oNotifyIconData
End Sub

解决方案 »

  1.   

    '在窗体上放一个Text1和一个command1,点击command1
    Option Explicit
    '系统托盘
    Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
    '---------- dwMessage可以是以下NIM_ADD、NIM_DELETE、NIM_MODIFY 标识符之一----------
    Private Const NIM_ADD = &H0 '在任务栏中增加一个图标
    Private Const NIM_DELETE = &H2 '删除任务栏中的一个图标
    Private Const NIM_MODIFY = &H1 '修改任务栏中个图标信息Private Const NIF_MESSAGE = &H1 'NOTIFYICONDATA结构中uFlags的控制信息
    Private Const NIF_ICON = &H2
    Private Const NIF_TIP = &H4
    Private Const NIF_STATE = &H8
    Private Const NIF_INFO = &H10
    Private Const NIIF_NONE = &H0   '气泡提示类型
    Private Const NIIF_WARNING = &H2
    Private Const NIIF_ERROR = &H3
    Private Const NIIF_INFO = &H1
    Private Const NIIF_GUID = &H4Private Const WM_LBUTTONDBLCLK = &H203
    Private Const WM_LBUTTONDOWN = &H201
    Private Const WM_LBUTTONUP = &H202
    Private Const WM_MBUTTONDBLCLK = &H209
    Private Const WM_MBUTTONDOWN = &H207
    Private Const WM_MBUTTONUP = &H208
    Private Const WM_RBUTTONDBLCLK = &H206
    Private Const WM_RBUTTONDOWN = &H204
    Private Const WM_RBUTTONUP = &H205
    '系统托盘类型
    Private Type NOTIFYICONDATA
        cbSize As Long '该数据结构的大小
        hwnd As Long '处理任务栏中图标的窗口句柄
        uID As Long '定义的任务栏中图标的标识
        uFlags As Long '任务栏图标功能控制,可以是以下值的组合(一般全包括)
    '   NIF_MESSAGE 表示发送控制消息;
    '   NIF_ICON表示显示控制栏中的图标;
    '   NIF_TIP表示任务栏中的图标有动态提示。
        uCallbackMessage As Long '任务栏图标通过它与用户程序交换消息,处理该消息的窗口由hWnd决定
        hIcon As Long '任务栏中的图标的控制句柄
        szTip As String * 128 '图标的提示信息。若要产生气泡提示信息,则一定要128才性,为64则无法生成气泡,其它功能都正常,原因不明
        
        '气泡提示信息部分
        dwState As Long
        dwStateMask As Long
        szInfo As String * 256               '气泡提示内容
        uTimeout As Long                     '气泡提示显示时间
        szInfoTitle As String * 64           '气泡提示标题
        dwInfoFlags As Long                  '气泡提示类型,见 NIIF_*** 部分
    End Type
    '系统托盘变量
    Private m_oNotifyIconData As NOTIFYICONDATAPrivate Sub command1_Click()
        If Len(Text1.Text) > 128 Then
            MsgBox "系统托盘气泡提示文字不得超过128个字符!"
            Exit Sub
        End If
        m_oNotifyIconData.szInfoTitle = "提示" & Chr(0)
        m_oNotifyIconData.szInfo = Text1.Text & Chr(0)
        Shell_NotifyIcon NIM_MODIFY, m_oNotifyIconData
    End SubPrivate Sub Form_Load()
        '生成系统托盘图标
        With m_oNotifyIconData
            .cbSize = Len(m_oNotifyIconData)
            .hwnd = Me.hwnd
            .uID = 0
            .uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP
            .uCallbackMessage = WM_LBUTTONDOWN
            .hIcon = Me.Icon
            .szTip = Me.Caption & vbNullChar
        End With
        Shell_NotifyIcon NIM_ADD, m_oNotifyIconData
        Timer1.Interval = 200
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Shell_NotifyIcon NIM_DELETE, m_oNotifyIconData
    End SubPrivate Sub Timer1_Timer()
    Text1 = Now
    End Sub
      

  2.   

    嗯,好像没说清楚,一楼误解了我说的气泡提示显示时间,不是显示出时间而是当气泡出现后,显示的时间,如果1秒,则显示1秒后气泡消失见源码里“uTimeout As Long      '气泡提示显示时间” 这段
      

  3.   

    摘录自MSDNuTimeout
    Windows 2000 and later. 
    Note  This member is deprecated as of Windows Vista. Notification display times are now based on system accessibility settings.Union with uVersion. The timeout value, in milliseconds, for notification. The system enforces minimum and maximum timeout values. Values specified in uTimeout that are too large are set to the maximum value. Values that are too small default to the minimum value. The system minimum and maximum timeout values are currently set at 10 seconds and 30 seconds, respectively. See Res for further discussion of uTimeout.大致意思是说:
    1、2000以后的系统这个uTimeout才有效
    2、对于Vista无效(与系统辅助功能有关?)
    3、以毫秒为单位,有最小值10以及最大值30LZ设置的貌似是1吧这个参数,网上大多数教程都说无效,我自己做了很多次好像也没什么效果如果真是有效果的话,以毫秒为单位,最小值10最大值30,貌似也没什么用