记得form的属性里有一个在任务栏添加图标的属性,找不到了。谢谢!

解决方案 »

  1.   


       网上的一篇文章.参考一下: 
    '相信您的机器上一定装有"金山词霸",试着启动它您发现了什么?启动画面过后它"不见了"。把鼠标移到  桌面的右下角,原来它以图标的形式"藏在"  Windows的托盘中。用鼠标右击它还会弹出一个菜单功能项供您选择。现在您一定想把自己的程序也放到托盘,这样您的  程序多具有专业水准!  
    '下面是此功能的实现步骤:  
    '1.这里我们调用的API函数是:  
    '"Shell_NotifyIcon",在您的模块中添加如下的函  
    '数声明和常量声明:  
    '以下常量告诉系统在托盘中您的图标上发生了什么  操作  
    '常量声明  
    Public  Const  WM_MOUSEMOVE  =  &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  '响应您定义的热键  
    'API函数声明  
    Public  Declare  Function  Shell_NotifyIcon  Lib  "shell32.dll"  Alias  ""  ()  
    Shell_NotifyIconA  "  (ByVal  dwMessage  As  Long,  lpData  As  NOTIFYICONDATA)  As  Long  "  
    '自定义一个调用API  Shell_NotifyIcon要用到的类  型"NOTIFYICONDATA"  
    Public  Type  NOTIFYICONDATA  
    cdSize  As  Long  'NOTIFYICONDATA类型的大小  
    hwnd  As  Long  '你的应用程序窗体的名柄  
    uId  As  Long  '应用程序图标资源的ID号  
    uFlags  As  Long  '使那些参数有效它是以下枚举类型中的  
    'NIF_MESSAGE、NIF_ICON、NIF_TIP三组的组合  
    uCallbackMessage  As  Long  '鼠标移动时把此消息发给该图标的窗体  
    hIcon  As  Long  '图标名柄  
    szTip  As  String  *  64  '当鼠标在图标上时显示的Tip文本  
    End  Type  
     
    '这是一个枚举类型它告诉API  Shell_NotifyIcon去做什么操作  
    Public  Enum  enm_NIM_Shell  
    NIM_ADD  =  &H40  '在“金碟”中加一图标  
    NIM_MODIFY  =  &H1  '修改“金碟”中的图标  
    NIM_DELETE  =  &H2  '删除“金碟”中的图标  
    NIF_MESSAGE  =  &H1  '使类型"NOTIFYICONDATA"中的uCallbackMessage有效  
    NIF_ICON  =  &H2  '使类型"NOTIFYICONDATA"中的hIcon有效  
    NIF_TIP  =  &H4  '使类型"NOTIFYICONDATA"中的szTip有效  
    WM_MOUSEMOVE  =  &H200  '使鼠标移动消息有效  
    End  Enum  
    '定义一个"NOTIFYICONDATA"类型的变量  
    Public  nidProgramData  As  NOTIFYICONDATA  
     
    '以上是函数及常量声明和自定义的一个类型变量,下面是此API函数的调用方法:  
    '2.  在窗体上用菜单编辑一个具有如下信息的菜单项:  
    '主菜单:  无标题、名称  (mainMenu)  
    '子菜单:标题(API编程)、名称(submnul);  
    '标题(退出)、名称(submnu2).  
    '这里只是举个例子,具体的功能你可以根据你的具体需要来编辑此菜单项  
    '3.  在窗体的Load事件中添加如下代码:  
    Private  Sub  Form_Load()  
    '隐藏窗体  
    With  Me  
           .Top  =  -10000  
           .Left  =  -10000  
           .WindowState  =  vbMinimized  
    End  With  
    '设置类型NOTIFYICONDATA所具有的特征  
    With  nidProgramData  
           .cbSize  =  Len(nidProgramData)  
           .hwnd  =  Me.hwnd  
           .uld  =  vbNull  
           .uFlags  =  NIF_ICON  Or  NIF_TIP  Or  NIF_MESSAGE  
           '触发鼠标移动消息  
           .uCallbackMessage  =  WM_MOUSEMOVE  
           .hIcon  =  Me.Icon  
           '“托盘”中放入窗体图标,你可以把窗体的图标换成你所喜欢的图标  
           .szTip  =  "VB  的  Win32  API  编程"  &  vbNullChar  
    End  With  
     
    '调用该函数  
    Shell_NotifyIcon  NIM_ADD,  nidProgramData  
    End  Sub  
    '根据不同的鼠标消息做不同的操作  
    Private  Sub  Form_MouseMove(Button  As  Integer,  Shift  As  lnteger,  x  As  Single,  Y  As  Single)  
    On  Error  GoTo  Form_MouseMove_err:  
    Dim  Result  As  Long  
    Dim  msg  As  Long  
    'X的值依赖与显示模式的设置  
    If  Me.ScaleMode  =  vbPixels  Then  
           msg  =  x  
    Else  
           msg  =  x  /  Screen.TwipsPerPixe1X  
    End  If  
    Select  Case  msg  
           Case  WM_LBUTTONUP  
           '在这里加入鼠标左键释放时你想做的操作  
           Case  WM_LBUTTONDBLCLK  
           '在这里加入双击鼠标左键时你想做的操作  
           Case  WM_RBUTTONUP  
           '通常这里弹出你的功能菜单  
           PopupMenu  mainMenu  
           Case  WM_MOUSEISMOVING  
           '在这里加入鼠标正在移动时你想做的操作  
           End  Select  
    Exit  Sub  
      

  2.   


    Form_MouseMove_err:  
    '在这里加入你的处理异常错误的代码  
    End  Sub  
    '4.Run你的程序,您是不是看到了象“金山词霸”一样的功能?相信你此时的感觉一定特别“爽”!  API的世界j是丰富多彩的,只要你肯细心地去探索它你一定会获得许多意想不到的好东西。所以笔者觉得定值得每一个具有“好奇”精神的人去探索它。后续的期刊笔者会向读者详细介绍一些更好更“牛”的API调用。  
     
    ---------------------------------------------------------------  
     
    在WINDOWS98里,右下角有许多应用程序的图标。而程序本身的窗口是隐藏的,若你需要调用应用程序的窗口,则双击该图标即可。这种程序称为托盘程序。这是WINDOWS98操作系统的一大特色。使用户能够更加快捷的显示和隐藏应用程序,可以使任务栏不致于太乱。托盘程序在Visual  Basic里是怎么实现的呢?    
        编写托盘程序主要解决两个问题:(1)创建、修改、删除托盘;(2)如何对托盘接收到的消息进行处理。这就要用到几个Windows  API函数。    
        首先,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    
        其次,应该考虑怎样在VB中接收、处理托盘的消息(双击、单击、左键、右键)。C++、Delphi等语言对消息循环的处理较简单,但在VB中处理消息循环时必须应用Win32的SetWindowLong、CallWindowProc这两个API函数。SetWindowLong  函数利用GWL_WNDPROC  索引来创建窗口类的子类(窗口类是用来创建窗口的),它使用AddressOf关键字和回调函数(WindowProc)来截取消息并根据消息来执行相应的功能,如窗口的最大化、最小化、隐藏、退出等。CallWindowProc函数调用原窗口类缺省的指针,程序最后退出时可通过SetWindowLong来关闭子类,重新使原来的Windows过程成为回调函数。    
        本程序项目包括一个模块和一个窗体    
        1、模块源代码为:    
        Option  Explicit  '强制定义每个使用的变量    
         Type  NOTIFYICONDATA  '定义结构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    
        'Shell_NotifyIcon的函数声明    
        Declare  Function  Shell_NotifyIcon  Lib  "shell32.dll"  Alias  "Shell_NotifyIconA"    
        (ByVal  dwMessage  As  Long,  lpData  As  NOTIFYICONDATA)  As  Long    
        '处理消息将用到的结构、常量、API声明    
        Type  POINTAPI    
          x  As  Long    
          y  As  Long    
        End  Type    
        Type  Msg    
          hwnd  As  Long    
          message  As  Long    
          wParam  As  Long    
          lParam  As  Long    
          time  As  Long    
          pt  As  POINTAPI    
        End  Type    
          Public  Const  WM_USER  =  &H400    
      Public  Const  WM_RBUTTONDOWN  =  &H204    
      Public  Const  WM_LBUTTONDBLCLK  =  &H203    
        Public  Const  GWL_WNDPROC  =  -4    
        Public  trayflag  As  Boolean  '定义托盘图标是否在桌面上    
        Global  lpPrevWndProc  As  Long    
        Global  gHW  As  Long    
      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    
        '以下过程为消息循环处理    
      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    
      Public  Sub  hook()  '将程序勾入消息环中    
        '利用Address 
      

  3.   

    托盘程序详解(一)
    http://www.hongen.com/pc/program/apitutor/api0012/api01.htm
      

  4.   

    Option ExplicitPrivate 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 TypePrivate Const WM_LBUTTONDOWN = &H201
    Private Const WM_LBUTTONDBLCLK = &H203
    Private Const WM_RBUTTONUP = &H205
    Private Const NIM_ADD = &H0
    Private Const NIM_MODIFY = &H1
    Private Const NIF_MESSAGE = &H1
    Private Const NIM_DELETE = &H2
    Private Const NIF_ICON = &H2
    Private Const NIF_TIP = &H4
    Private Const WM_MOUSEMOVE = &H200Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As LongDim TrayIcon As NOTIFYICONDATA, bolFlag As BooleanPrivate Sub Form_Load()
        TrayIcon.cbSize = Len(TrayIcon)
        TrayIcon.hWnd = hWnd
        TrayIcon.uId = vbNull
        TrayIcon.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        TrayIcon.ucallbackMessage = WM_MOUSEMOVE
        TrayIcon.hIcon = Me.Icon
        TrayIcon.szTip = "拖盘" & Chr(0)
        
        '在系统栏添加拖盘
        Call Shell_NotifyIcon(NIM_ADD, TrayIcon)
    End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        '构造系统拖盘结构
        TrayIcon.cbSize = Len(TrayIcon)
        TrayIcon.hWnd = Me.hWnd
        TrayIcon.uId = vbNull
        
        '删除系统栏的拖盘
        Call Shell_NotifyIcon(NIM_DELETE, TrayIcon)
    End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
        Dim Message As Long
        
        Message = X / Screen.TwipsPerPixelX    '判断鼠标消息,执行不同的功能
        Select Case Message
          Case WM_LBUTTONDOWN
              '点击拖盘
          Case WM_RBUTTONUP
              SetForegroundWindow Me.hWnd
              '按右键弹出菜单
              'PopupMenu mnuPopup
        End Select
    End SubPrivate Sub Timer1_Timer()
        bolFlag = Not bolFlag
        
        TrayIcon.cbSize = Len(TrayIcon)
        TrayIcon.hWnd = hWnd
        TrayIcon.uId = vbNull
        TrayIcon.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        TrayIcon.ucallbackMessage = WM_MOUSEMOVE
        TrayIcon.hIcon = IIf(bolFlag, Me.Icon, Picture1.Picture)
        TrayIcon.szTip = "拖盘" & Chr(0)
        
        '在系统栏添加拖盘
        Call Shell_NotifyIcon(NIM_MODIFY, TrayIcon)
    End Sub
      

  5.   

    如果楼主手头有VB6的安装盘的话可以找一下
    "\COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY"
    里面有一个现成的Systray控件源码,把它加入到自己的工程中,然后拖这样的一个控件到窗体上写几行代码就行了.