¿Cómo minimizar el siguiente código vb en la bandeja? ¿Y se puede restaurar?
Poner?Module1.bas
Opción?Explícito
'Icono de bandeja'
Tipo?NOTIFYICONDATA
cbSize?As?Long
hwnd?As?Long
uId?As?Long
uFlags?As?Long
ucallbackMessage ?As?Long
hIcon?As?Long
szTip?As?String?*?64
Fin?Tipo
Público ?=? &H0
¿Público?Const?NIM_MODIFY?=? &H1
¿Público?Const?NIM_DELETE?= &H2
¿Público?Const?WM_MOUSEMOVE?= ? &H200
¿Público?Const?NIF_MESSAGE?=? &H1
¿Público?Const?NIF_ICON?=?&H2
¿Público?Const?NIF_TIP?=?
¿Público?¿Declarar?Función?Shell_NotifyIcon?Lib?"shell32"? "Shell_NotifyIconA"?_
(ByVal?dwMessage?As?Long,?pnid?As?NOTIFYICONDATA)?As?Boolean
Público?Declarar?Función?EnviarMensaje?Lib?" usuario32"? ¿"SendMessageA"?_
(ByVal?hwnd?As?Long,?ByVal?wMsg?As?Long,?ByVal?wParam?As?Long,?lParam?As?Any)?As?Long
Public?Const?LB_ SETHORIZONTALEXTENT?=?&H194
Public?Const?LB_ITEMFROMPOINT?=?&H1A9
'Reconstruir ventana
¿Público?Declarar?Función?GetWindowLong?Lib?"user32"?"GetWindowLongA"?(ByVal?hwnd?As?Long,?ByVal?nIndex?As?Long)?As?Long?'//////// //, obtienes la estructura especificada del formulario especificado
Public?Declare?Function?SetWindowLong?Lib?"user32" ?Alias?"SetWindowLongA"?(ByVal?hwnd?As?Long,?ByVal? nIndex ?As?Long,?ByVal?dwNewLong?As?Long)?As?Long?'//////////, similar al anterior, pero se usa para establecer
Público ?Declarar ?Función?RegisterWindowMessage?Lib? "usuario32"? ¿"RegisterWindowMessageA"?(ByVal?lpString?As?String)?As?Long?'////////// RegisterSystemMessage
Público?Declarar?F
¿unción?CallWindowProc?Lib?"usuario32"? CallWindowProcA"?(ByVal?lpPrevWndFunc?As?Long,?ByVal?hwnd?As?Long,?ByVal?msg?As?Long,?ByVal?wParam?As?Long,?ByVal?lParam?As?Long)?As ?Long?'//////// // Procesar mensajes
'Public?p>
'Public?Function?wwndproc(ByVal?hwnd?As?Long, ?ByVal?msg?As?Long,?ByVal?wParam?As?Long,?ByVal?lParam?As?Long)?As?Long
'Público?Const?GWL_WNDPROC?=?(-4 )?'////////// Obtener la dirección de la función de ventana de esta ventana
Public?lngProOld?As?Long
Public?lngMsgBarRester?As?Long
p>¿Pública?WM_TASKBARCREATED?As?Long
Pública?t?As?NOTIFYICONDATA
Pública?Función?wndproc(ByVal?hwnd?As?Long, ?ByVal?msg?As?Long,?ByVal?wParam?As?Long,?ByVal?lParam?As?Long)?/////////// Nuevo icono de bandeja
Fin ?if
wndproc?=?CallWindowProc(lngProOld,?hwnd,?msg,?wParam,?lParam)?'//////////, si el formulario no puede manejar otros mensajes
¿Fin?Función
Colocarlo en Private?Sub?Form_Load() de Form1
'Establecer propiedades del icono de bandeja
Utilice ?t p>
.cbSize?=?Len(t)
.hwnd?=?pic.hwnd
.uId?=?1&
uFlags?=?NIF_ICON?o NIF_TIP?o NIF_MESSAGE
.ucallbackMessage?=?WM_ MOUSEMOVE
.hIcon?=?pic.Picture
.szTip? =?"----O(∩_∩)O Abrir rápidamente la carpetaO(∩_∩)O----" &?Chr$(0)
Fin ?Con p>
Shell_NotifyIcon?NIM_ADD,?t
lngProOld?=?GetWindowLong(Me.hwnd,?GWL_WNDPROC)?//////////Obtener la dirección de la función de formulario y guárdelo
Llame a SetWindowLong(Me.hwnd,?GWL_WNDPROC,?AddressOf?wndproc)?/////////// para ubicar el mensaje en la función wndproc (proceso )
lngMsgBarRester?=?RegisterWindowMessage("TaskBarCreated")?'/////////// Registre el mensaje TaskBarCreated.
Coloque el siguiente código en Private?Sub?Form_Unload(Cancel?As?Integer) en Form
With?t
.cbSize?=?Len ( t)
.hwnd?=?pic.hwnd
.uId?=?1&
¿Fin?Con
Shell_NotifyIcon? ,?
El código muestra más, agregue "..." ícono de reconstrucción de código. Efecto: cuando finaliza el proceso explorer.exe, el icono de la barra de tareas no se mostrará, pero el programa aún se está ejecutando. Muchos programas tienen este problema. Entonces, el código para reconstruir el ícono se agrega al código. Cuando explorer.exe finalice y se cree nuevamente, ¿se reconstruirá el ícono de la barra de tareas y aún se mostrará? Captura de pantalla