如果那个程序有不妥的地方,再参考这个。窗体 Option ExplicitPrivate Sub MDIForm_Load() Hook Me.hWnd End SubPrivate Sub MDIForm_Unload(Cancel As Integer) Unhook End Sub模块 Option Explicit Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) 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 Public nfIconData As NOTIFYICONDATA Public Const WM_LBUTTONDOWN = &H201 Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function ReleaseCapture Lib "user32" () As Long Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Public Const RGN_OR = 2 Public Const WM_NCLBUTTONDOWN = &HA1 Public Const HTCAPTION = 2 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205 Public Const WM_ACTIVATEAPP = &H1C 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 MAX_TOOLTIP As Integer = 64 Public Const GWL_WNDPROC = (-4) Public Const WM_LBUTTONDBLCLK = &H203Type 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 Private FHandle As Long Private WndProc As Long Private Hooking As Boolean Public Const WM_SYSCOMMAND = &H112Public Sub AddIconToTray(MeHwnd As Long, MeIcon As Long, MeIconHandle As Long, Tip As String) With nfIconData .hWnd = MeHwnd .uID = MeIcon .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP .uCallbackMessage = WM_RBUTTONUP .hIcon = MeIconHandle .szTip = Tip & Chr$(0) .cbSize = Len(nfIconData) End With Shell_NotifyIcon NIM_ADD, nfIconData End SubPublic Sub RemoveIconFromTray() Shell_NotifyIcon NIM_DELETE, nfIconData End SubPublic Sub Hook(Lwnd As Long) If Hooking = False Then FHandle = Lwnd WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc) Hooking = True End If End SubPublic Sub Unhook() If Hooking = True Then SetWindowLong FHandle, GWL_WNDPROC, WndProc Hooking = False End If End SubPublic Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Hooking = True Then If lParam = WM_LBUTTONDOWN Then SetForegroundWindow hw MDIForm1.Show MDIForm1.WindowState = 0 SetForegroundWindow hw RemoveIconFromTray Exit Function End If If uMsg = WM_SYSCOMMAND And wParam = 61472 Then MDIForm1.WindowState = 1 MDIForm1.Hide AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa" End If WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along End If End Function
它只是将应用程序的图标放在了右下角(系统工程托盘).
你可以SOU一下了以前的贴子多了.
Option ExplicitPrivate Sub MDIForm_Load()
Hook Me.hWnd
End SubPrivate Sub MDIForm_Unload(Cancel As Integer)
Unhook
End Sub模块
Option Explicit
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) 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
Public nfIconData As NOTIFYICONDATA
Public Const WM_LBUTTONDOWN = &H201
Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const RGN_OR = 2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_ACTIVATEAPP = &H1C
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 MAX_TOOLTIP As Integer = 64
Public Const GWL_WNDPROC = (-4)
Public Const WM_LBUTTONDBLCLK = &H203Type 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
Private FHandle As Long
Private WndProc As Long
Private Hooking As Boolean
Public Const WM_SYSCOMMAND = &H112Public Sub AddIconToTray(MeHwnd As Long, MeIcon As Long, MeIconHandle As Long, Tip As String)
With nfIconData
.hWnd = MeHwnd
.uID = MeIcon
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_RBUTTONUP
.hIcon = MeIconHandle
.szTip = Tip & Chr$(0)
.cbSize = Len(nfIconData)
End With
Shell_NotifyIcon NIM_ADD, nfIconData
End SubPublic Sub RemoveIconFromTray()
Shell_NotifyIcon NIM_DELETE, nfIconData
End SubPublic Sub Hook(Lwnd As Long)
If Hooking = False Then
FHandle = Lwnd
WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc)
Hooking = True
End If
End SubPublic Sub Unhook()
If Hooking = True Then
SetWindowLong FHandle, GWL_WNDPROC, WndProc
Hooking = False
End If
End SubPublic Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Hooking = True Then
If lParam = WM_LBUTTONDOWN Then
SetForegroundWindow hw
MDIForm1.Show
MDIForm1.WindowState = 0
SetForegroundWindow hw
RemoveIconFromTray
Exit Function
End If
If uMsg = WM_SYSCOMMAND And wParam = 61472 Then
MDIForm1.WindowState = 1
MDIForm1.Hide
AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa"
End If
WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along
End If
End Function