希望可以实现主程序与托盘分离,像杀毒软件那样,可以自启动托盘。通过托盘可以打开主程序!(上面部分都已经实现)。怎么样直接执行主程序,执行时判断托盘如果打开则执行主程序,未打开则先打开托盘,再执行主程序!
我是菜鸟,希望可以讲得稍微详细些!跪谢!

解决方案 »

  1.   

    托盘与程序是连体的, exe没打开你拿什么放托盘,你只看到托盘而没看到窗体,那是因为窗体隐藏了,点击托盘的菜单后窗体才会出来.
      

  2.   

    像瑞星杀毒软件那样,有一个防火墙,另外还有个防火墙主程序!
    还有,托盘本来不应该占用很多资源吧?如果只是把主程序隐藏,那样不是很占资源?
    托盘肯定也要.exe,那能不能一个软件有几个.exe?怎么实现?就像瑞星防火墙那样!
      

  3.   

    你不用考虑瑞星怎么做的,否则你的程序岂不是不如瑞星了cbm666说的很正确了。
      

  4.   

    显示图标的程序未必就多大了,主程序比如是100M,托盘程序可能就1K,只要能够实现shell 主程序 就行了。
      

  5.   

    那样的话就是要多个.exe文件了?是这个意思吗?单个exe文件肯定要同时打开主程序?
      

  6.   

    那你就来个最简单的exe , 代码就只有放入托盘与响应托盘菜单的事件, 菜单事件中可以加上 shell一个或多个exe, 程序一打开窗体就隐藏只看得到托盘.第二个或第三个或第N个exe 就捆绑在资源文件里面, 要用到就随时释放 shell运行.
      

  7.   

    以下方法绝对可以的哦!1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False 2、菜单:工程--添加模块 按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas 3、在Module1中写下如下代码: Option Explicit Public Const MAX_TOOLTIP As Integer = 64 
    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 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 SW_RESTORE = 9 
    Public Const SW_HIDE = 0 Public nfIconData As NOTIFYICONDATA 
    Public Type NOTIFYICONDATA 
    cbSize As Long 
    hWnd As Long 
    uID As Long 
    uFlags As Long 
    uCallbackMessage As Long 
    hIcon As Long 
    szTip As String * MAX_TOOLTIP 
    End Type Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long 
    Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long '4、在Form1的Load事件中写下如下代码: Private Sub Form_Load() '以下把程序放入System Tray====================================System Tray Begin 
    With nfIconData 
    .hWnd = Me.hWnd 
    .uID = Me.Icon 
    .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP 
    .uCallbackMessage = WM_MOUSEMOVE 
    .hIcon = Me.Icon.Handle 
    '定义鼠标移动到托盘上时显示的Tip 
    .szTip = App.Title + "(版本 " & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar 
    .cbSize = Len(nfIconData) 
    End With 
    Call Shell_NotifyIcon(NIM_ADD, nfIconData) 
    '=============================================================System Tray End 
    Me.Hide 
    End Sub '5、在Form1的QueryUnload事件中写入如下代码: Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
    Call Shell_NotifyIcon(NIM_DELETE, nfIconData) 
    End Sub '6、在Form1的MouseMove事件中写下如下代码: Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 
    Dim lMsg As Single 
    lMsg = X / Screen.TwipsPerPixelX 
    Select Case lMsg 
    Case WM_LBUTTONUP 
    'MsgBox "请用鼠标右键点击图标!", vbInformation, "实时播音专家" 
    '单击左键,显示窗体 
    ShowWindow Me.hWnd, SW_RESTORE 
    '下面两句的目的是把窗口显示在窗口最顶层 
    'Me.Show 
    'Me.SetFocus 
    '' Case WM_RBUTTONUP 
    '' PopupMenu MenuTray '如果是在系统Tray图标上点右键,则弹出菜单MenuTray 
    '' Case WM_MOUSEMOVE 
    '' Case WM_LBUTTONDOWN 
    '' Case WM_LBUTTONDBLCLK 
    '' Case WM_RBUTTONDOWN 
    '' Case WM_RBUTTONDBLCLK 
    '' Case Else 
    End Select 
    End Sub 7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。单击此图标,Form1就自动弹出来了。