Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo puedo minimizar el programa VB y mostrarlo en la bandeja?

¿Cómo puedo minimizar el programa VB y mostrarlo en la bandeja?

Utilice VB para desarrollar un programa de bandeja

[Fuente: Desconocido | Reimpresión: www.cittm.net | Actualización: 2006-1-25]

Habrá mucho software en la bandeja del sistema al ejecutar Aparece un pequeño icono en el área (es decir, el área donde se muestra la hora en la esquina inferior derecha del escritorio), que sirve como señal de que el programa se está ejecutando. Podemos controlar el estado del programa a través de. el menú que aparece desde el icono pequeño. Este ejemplo proporciona un programa de bandeja completamente funcional. Podemos ver cómo usar la función API Shell_NotifyIcon para agregar, eliminar y cambiar el ícono de la bandeja y este ejemplo también demuestra cómo agregar un menú contextual y un mensaje flotante para el ícono de la bandeja. .

El programa (adjunto) utiliza funciones API como Shell_NotifyIcon, SendMessage, CallWindowProc, SetWindowLong, etc. Shell_NotifyIcon es la función principal, utilizada para agregar, eliminar y cambiar el ícono del área de la bandeja del sistema (barra de tareas).

Antes de utilizar la función API, debes declarar lo siguiente en el programa:

Declarar la función Shell_NotifyIcon Lib "shell32.dll" alias "Shell_NotifyIconA" (By By) NotifyIconA" ( ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

La siguiente tabla proporciona el significado de cada parámetro:

Parámetro: Significado

dwMessage es el valor de la configuración del mensaje, puede ser uno de los siguientes valores constantes: 0, 1, 2

NIM_ADD = 0 Agrega un icono a la barra de estado del sistema

NIM_MODIFY = 1 Modifica el icono en la barra de estado del sistema

NIM_DELETE = 2 elimina el ícono de la barra de estado del sistema

LpData se usa para pasar la variable de estructura de datos NOTIFYICONDATA La estructura es la siguiente: szTip es válido<. /p>

UCallbackMessage As Long número de mensaje

p>

HIcon As Long El icono que se mostrará en la barra de estado

SzTip As String * 64 mensaje de aviso

Tipo final

Valor de retorno Largo, distinto de cero indica éxito, cero indica error

Antes de usar esta función API, debemos definir el tipo de estructura NOTIFYICONDATA:

Tipo público NOTIFYICONDATA

cbSize Mientras HWnd Mientras

Uid Mientras UFlags Mientras

UCallbackMessage Mientras

HIcon As Long

SzTip As String * 64

Tipo final

Luego defina una variable NOTIFYICONDATA TheData para registrar los datos para configurar el icono de la bandeja

Privar TheData como NOTIFYICONDATA

Entonces podemos usar Esta función configura el icono de la bandeja del sistema.

Icon.Handle 'frm.Icon.Handle apunta al icono del formulario principal

.UFlags = NIF_ICON

.UCallbackMessage = TRAY_CALLBACK

'Su función es para permitir devolver un mensaje, que se explica en la siguiente sección. .

.UFlags = .UFlags Or NIF_MESSAGE

.cbSize = Len(TheData)

Terminar con

Shell_NotifyIcon NIM_ADD, TheData

'De acuerdo con la definición NIM_ADD anterior, configúrelo en "Modo Agregar" y luego agregue

2. Icono Eliminar

Usar TheData

. UFlags = 0

Finalizar con

Shell_NotifyIcon NIM_DELETE, TheData

'Según la definición anterior de NIM_DELETE, configurado en "modo de eliminación"

3. Cambia el ícono

Usa TheData

.HIcon = pic.Handle

'pic es el PictureBox que guarda el archivo del ícono

.UFlags = NIF_ICON

End With

Shell_NotifyIcon NIM_MODIFY, TheData

'Según la definición anterior de NIM_MODIFY, configurado en "modo de cambio"

4 .Agregue una sugerencia flotante al ícono

Utilice TheData

.SzTip = tip amp vbNullChar

'tip es una cadena; que almacena información de propinas

. UFlags = NIF_TIP

'Especificar para establecer mensajes flotantes

End With

Shell_NotifyIcon NIM_MODIFY, TheData

'Según la definición anterior de NIM_MODIFY , Establezca el mensaje en NIM_MODIFY, TheData

'Establezca el mensaje en NIM_MODIFY

según la definición NIM_MODIFY anterior. MODIFICAR, configurar en "Modo Modificar"

A través del código anterior, podemos agregar, eliminar y cambiar el ícono de la bandeja del sistema según nuestras necesidades, y agregar un mensaje de alerta flotante en el ícono del sistema. Pero en este momento el icono de la bandeja está aislado y no podemos usarlo para controlar el comportamiento de la aplicación ¿Qué debemos hacer? No te preocupes, sigue leyendo….

Si descarga (descarga fuente) y ejecuta este programa de muestra, encontrará que si hacemos clic derecho en el icono de la bandeja, aparecerá un menú contextual. Si hace clic en el elemento del menú correspondiente, la ventana principal del programa cambiará en consecuencia, para que pueda controlar el comportamiento del programa. Cuando la ventana principal esté minimizada, si hacemos clic en el botón izquierdo del icono de la bandeja, la ventana volverá a su tamaño original. De hecho, la implementación de las funciones anteriores se basa en el mecanismo de paso de mensajes del sistema operativo WINDOWS. No es fácil comprender completamente este mecanismo, pero podemos entenderlo de acuerdo con el siguiente texto.

El sistema operativo WINDOWS es como el cerebro humano: recibe, procesa y envía diversa información a nuestros órganos (claro, esto es una metáfora de diversas aplicaciones), es decir, es una información. centro.

A cada aplicación (incluso a cada botón, etiqueta, formulario, etc. se le llama colectivamente ventana) se le asignará un proceso de ventana WINDOWPROC cuando se esté ejecutando, y el proceso de ventana recibirá y procesará mensajes del sistema operativo (de hecho, hay también una cola de mensajes), generalmente el proceso de ventana es designado por el sistema operativo, y responderá y procesará automáticamente algunos mensajes de WINDOWS (como movimiento de ventana, maximización, minimización, mensajes de error, etc.). Bueno, hagamos una pregunta por ahora: ¿pueden estos mensajes ser procesados ​​por el programa que escribimos nosotros mismos? La respuesta es sí, pero ¿cómo utilizar funciones API que también tienen funciones potentes? Echemos un vistazo a las definiciones y parámetros de estas funciones API.

El programa utiliza funciones API como SendMessage, CallWindowProc y SetWindowLong. La función SendMessage se usa para enviar mensajes a una ventana determinada; la función CallWindowProc se usa para enviar mensajes a un proceso de ventana determinado; La función SetWindowLong se utiliza para establecer las propiedades de la estructura de la ventana para la ventana especificada.

Antes de usar la función API, debe declarar la siguiente función en el programa:

Declarar la función 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

Declarar función SetWindowLong Lib "user32" alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Función de declaración privada SendMessage Lib "user32" Alias ​​​​"SendMessageA " (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

El significado El conjunto de estos parámetros es el siguiente: Se muestra:

Función CallWindowProc

Significado del parámetro

lpPrevWndFunction lpPrevWndFunc dirección larga y original del procedimiento de ventana

HWnd largo, identificador de ventana

p>

El mensaje es largo, el mensaje a enviar

wParam es largo, el tipo de mensaje, consulte la lista de parámetros de wParam

lParam es largo, varía según el parámetro wParam

lParam Long, varía según el parámetro wParam

Función WindowProc Larga, varía según el parámetro wParam

Valor de retorno Largo, varía según el mensaje enviado Diferente

Función SetWindowLong:

Parámetro TDgt Significado

hwnd Largo, el identificador de la ventana para obtener información

nIndex Long, consulte la descripción del parámetro nIndex de la función GetWindowLong

dwNewLong Long, el nuevo valor de la información de la ventana especificada por nIndex

Valor de retorno Long, el valor anterior de los datos especificados

Función SendMessage:

Significado del parámetro

hwnd Long, el identificador de la ventana para recibir el mensaje

wMsg Long, el identificador del mensaje

wParam Long, depende del contenido del mensaje

lParam Any, depende del contenido del mensaje

Valor de retorno Largo, depende del mensaje

Primero debemos escribir nuestro propio programa para procesar el mensaje. Las propiedades de la ventana deben cambiarse de usar el procedimiento de ventana predeterminado para manejar mensajes a usar un controlador de mensajes. nosotros mismos escribimos.

El método consiste en utilizar la función SetWindowLong para obtener la dirección del procedimiento de ventana predeterminado y luego transferirla a la dirección del procedimiento de ventana que escribimos. El código de implementación específico es el siguiente:

'GWL_WNDPROC obtiene. dirección del procedimiento de ventana de la ventana. AddressOf es la función de dirección. NewWindowProc es el procedimiento que escribimos. Procedimiento

OldWindowProc = SetWindowLong(frm.HWnd, GWL_WNDPROC, GWL_WNDPROC, GWL_WNDPROC, GWL_WNDPROC, GWL_WNDPROC).HWnd, GWL_WNDPROC, AddressOf

NewWindowProc)

Luego escriba el siguiente código en la función NewWindowProc y preste atención a los siguientes puntos El TRAY_CALLBACK rojo en. el código es un mensaje del ícono del área de la bandeja Para permitir que el ícono de la bandeja envíe un mensaje, debe agregar Al especificar el ícono de la bandeja:

Función pública NewWindowProc(ByVal HWnd As Long, ByVal Msg As. Long, ByVal wParam As Long, ByVal lParam As Long) As Long

'Si el usuario hace clic en el icono de la bandeja,

Si Msg = TRAY_CALLBACK, entonces

'Si se hace clic en el botón izquierdo

Si lParam = WM_LBUTTONUP, entonces

'El estado del formulario se minimiza

Si TheForm.WindowState = vbMuttonup , entonces