论坛: 编程破解 标题: 托盘图标 复制本贴地址    
作者: hyvictor [hyvictor]    论坛用户   登录
用VB编程时,如何让程序运行时在系统托盘处显示图标,请讲详细些,复杂了看不明白

地主 发表时间: 05-05-21 23:38

回复: peter [peter]   论坛用户   登录
    主要解决几个问题:(1)创建、修改、删除托盘;(2)如何对托盘接收到的消息进行处理。这就要用到几个Windows API函数。Shell_NotifyIcon CallWindowProc SetWindowLong
    首先,Shell_NotifyIcon是用于托盘的Shell API。该API用到一个NOTIFYICONDATA结构.
  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
以下为 Shell_NotifyIcon将用到的常量
    Public Const NIF_ICON = &H2
    Public Const NIF_MESSAGE = &H1
    Public Const NIF_TIP = &H4
    Public Const NIM_ADD = &H0
    Public Const NIM_DELETE = &H2
    Public Const NIM_MODIFY = &H1
'''''''''''''''''''''''''''''''''''''''''''
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
   If hw = Form1.hwnd And uMsg = WM_USER+100 Then'检测到鼠标点动托盘图标
    Select Case lParam
      Case WM_RBUTTONDOWN '鼠标右键按下
     Form1.PopupMenu Form1.mainmenu '弹出菜单
    Case WM_LBUTTONDBLCLK '鼠标左键双击
   Form1.Show '显示窗口
    Case Else
    End Select
   Else '调用缺省窗口指针
     WindowProc = CallWindowProc(lpPrevWndProc, hw,uMsg, wParam, lParam)
   End If
  End Function
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
   If hw = Form1.hwnd And uMsg = WM_USER+100 Then'检测到鼠标点动托盘图标
    Select Case lParam
      Case WM_RBUTTONDOWN '鼠标右键按下
    
    Case WM_LBUTTONDBLCLK '鼠标左键双击
  
    Case Else
    End Select
   Else '调用缺省窗口指针
     WindowProc = CallWindowProc(lpPrevWndProc, hw,uMsg, wParam, lParam)
   End If
  End Function
Public Sub hook() '将程序勾入消息环中
   '利用AddressOf取得消息处理函数WindowProc的指针,并将其传给SetWindowLong
   'lpPrevWndProc用来存储原窗口的指针
   lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
  End Sub
  Public Sub Unhook()
  '将程序从消息环退出。用原窗口的指针替换WindowProc函数的指针,即关闭子类、退出消息循环
   Dim temp As Long
   temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
  End Sub 
///////////////我也是很菜的..这样的文章网上比比佳是而且很详细.自己上网找一下.

B1层 发表时间: 05-05-22 02:14

回复: liyuefeng [liyuefeng]   论坛用户   登录
好象很高深啊


B2层 发表时间: 05-08-24 18:52

回复: qiezi [qiezi]      登录
如果你使用C#那是非常地容易,才几行代码!

B3层 发表时间: 05-08-25 09:41

回复: legioncmdr [legioncmdr]   论坛用户   登录
代码贴出来共享下下。。。

B4层 发表时间: 05-08-28 20:42

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号