Este artículo explica en detalle cómo Delphi obtiene identificadores y envía mensajes en forma de ejemplos. Las instrucciones de uso específicas son las siguientes:
Encuentra el identificador de otra ventana:
handle := FindWindow(nil,PChar('Título de la ventana'));//Encuentra el identificador del formulario
Buscar subformularios:
childHandle := FindWindowEx(handle,0,'clase de subformulario', 'título de subformulario');
También hay una API para enumerar subformularios.
EnumChildWindows (identificador del cuerpo principal, función @callback, parámetros de usuario);
Para utilizar esta función, debe escribir una función de devolución de llamada usted mismo, como por ejemplo:
función EnumChildProc(ahWND:HWND; parámetro:LPARAM):boolean; stdcall;sendmessage(handle,message,wl,rl)
unidad Unidad1; la interfaz utiliza Windows, Mensajes, Tlhelp32, SysUtils, Clases, Gráficos, Controles, Formularios, Diálogos, StdCtrls; escriba TForm1=clase(TForm)procedimiento FormCreate(Remitente: TObject); privado {Declaraciones privadas} público {Declaraciones públicas} fin; var Form1: TForm1;implementación{ $R *.DFM}procedimiento TForm1.FormCreate(Remitente: TObject);var a,b:PAnsiChar;h:HWND;beginh:= FindWindow(nil,'abc.txt - Notepad');h:= FindWindowEx(h,0,'edit', nil );SendMessage(h,WM_SETTEXT,255,Integer(PChar('Estoy aquí para medir')));ShowMessage( IntToStr(h));fin;
SendMessage(TreeView.Handle,TVM_SETBKCOLOR,0,RGB(255,0,0)); Establece el color de fondo del televisor SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0); , 0,0); Levante el botón izquierdo del mouse SendMessage(Edit.Handle,WM_SETTEXT,255,Integer(PChar('abc'))); Pase el texto SendMessage(Edit.Handle,WM_Char,Wparam('Q'),2); Enviar mensaje (Botón.Mango,BM_SETSTYLE,BS_RADIOBUTTON,1); Cambiar estilo de botón SendMessage(ComboBox.Handle,CB_SETDropPEDWIDTH,300,0);
WM_CUT, WM_COPY y WM_PASTE cortar, copiar, pegar
Implemente cualquier combinación de teclas:
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0);keybd_event(ord('V') , MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
SendMessageUna descripción: Llame a la función de ventana de una ventana para enviar un mensaje a esa ventana. Esta función no regresa a menos que se procese el mensaje.
SendMessage contiene 4 parámetros:
1. La ventana de identificador de ventana de 32 bits de hwnd puede ser cualquier tipo de objeto de pantalla, porque Win32 puede mantener identificadores para la mayoría de los objetos visuales.
2. wMsg es un valor constante que se utiliza para distinguir otros mensajes. Estas constantes pueden ser constantes predefinidas en unidades de Windows o constantes personalizadas.
3. wParam suele ser un valor constante relacionado con el mensaje, o puede ser el identificador de la ventana o control.
4. lParam suele ser un puntero que apunta a datos en la memoria. Dado que WParm, lParam y Pointer son todos de 32 bits, se pueden convertir entre sí.
Descripción detallada de la función wMsg:
★WM_Create crea una ventana
★WM_DESTROY Enviado cuando se destruye una ventana
★WM_MOVE Mover una ventana
★WM_SIZE Cambiar el tamaño de una ventana
★WM_ACTIVATE Se activa o desactiva una ventana
★WM_SETFOCUS Una ventana recibe el foco
★WM_KILLFOCUS Una ventana pierde el foco
★WM_ENABLE cambia una ventana al estado Habilitar
★WM_SETREDRAW Establece si la ventana se puede volver a dibujar
★WM_SETTEXT La aplicación envía este mensaje para configurar el texto de una ventana
★WM_GETTEXT La aplicación envía este mensaje para copiar el texto de la ventana correspondiente al buffer.
★WM_GETTEXTLENGTH Obtiene la longitud del texto relacionado con una ventana (excluidos los caracteres nulos)
★WM_PAINT le pide a una ventana que se vuelva a pintar
★WM_CLOSE envía una señal cuando se debe cerrar una ventana o aplicación.
★WM_QUERYENDSESSION El usuario elige finalizar el cuadro de diálogo o el programa llama a la función ExitWindows.
★WM_QUIT se utiliza para finalizar la ejecución del programa.
★WM_QUERYOPEN Cuando la ventana del usuario se restablezca a su tamaño y posición anteriores, envíe este mensaje a un icono
★WM_ERASEBKGND Cuando se debe borrar el fondo de la ventana (por ejemplo, cuando la ventana cambia de tamaño)
★WM_SYSCOLORCHANGE Cuando el color del sistema cambie, envíe este mensaje a todas las ventanas de nivel superior
★Después del mensaje WM_QUERYENDSESSION, este mensaje se envía a la aplicación para notificarle si la conversación ha finalizado.
★WM_SHOWWINDOW Este mensaje se envía a esta ventana cuando la ventana está oculta o mostrada.
★WM_ACTIVATEAPP envía este mensaje a la aplicación qué ventana está activa y cuál está inactiva.
★WM_FONTCHANGE Este mensaje se envía a todas las ventanas de nivel superior cuando cambia la biblioteca de recursos de fuentes del sistema.
★WM_TIMECHANGE Envía este mensaje a todas las ventanas de nivel superior cuando cambie la hora del sistema
★WM_CANCELMODE Envíe este mensaje para cancelar un modo en curso (operación)
★WM_SETCURSOR Si el mouse hace que el cursor se mueva en una ventana
★WM_ENDSESSION Cuando el proceso del sistema falla y la entrada del mouse no se captura, se envía un mensaje a una ventana.
★WM_MOUSEACTIVATE envía este mensaje a la ventana actual cuando el cursor está en una ventana inactiva y el usuario está presionando un botón del mouse.
★WM_CHILDACTIVATE Envía este mensaje a la ventana secundaria de MDI cuando el usuario hace clic en la barra de título de esta ventana, o cuando la ventana se activa, mueve o cambia de tamaño.
★WM_QUEUESYNC Este mensaje es enviado por un programa de capacitación basado en computadora y el mensaje ingresado por el usuario está separado por el programa de enlace de WH_JOURNALPALYBACK
★WM_GETMINMAXINFO Este mensaje se envía a la ventana cuando está a punto de cambiar de tamaño o posición.
★WM_PAINTICON Enviado a una ventana minimizada cuando su icono está a punto de volver a dibujarse
★WM_ICONERASEBKGND Este mensaje se envía a una ventana minimizada sólo si se debe volver a dibujar su fondo antes de dibujar el icono.
★WM_NEXTDLGCT★Envíe este mensaje a un programa de cuadro de diálogo para cambiar la posición del enfoque
★WM_SPOOLERSTATUS Este mensaje se emite cada vez que se agrega o resta un trabajo de la cola de administración de impresión.
★WM_DRAWITEM Se envía cuando cambia la apariencia visual del botón, cuadro combinado, cuadro de lista o menú.
★WM_MEASUREITEM Cuando se crea un botón, cuadro combinado, cuadro de lista, control de vista de lista o elemento de menú
★WM_VKEYTOITEM Este mensaje tiene un estilo LBS_WANTKEYBOARDINPUT emitido a su propietario en respuesta al mensaje WM_KEYDOWN
★WM_CHARTOITEM Este mensaje lo envía un cuadro de lista de estilo LBS_WANTKEYBOARDINPUT a su propietario en respuesta al mensaje WM_CHAR
★WM_SETFONT Al dibujar texto, el programa envía este mensaje para obtener el color que utilizará el control.
★WM_GETFONT La aplicación envía este mensaje para obtener la fuente del texto dibujado por el control actual.
★WM_SETHOTKEY La aplicación envía este mensaje para asociar una ventana con una tecla de acceso rápido.
★WM_GETHOTKEY La aplicación envía este mensaje para determinar si la tecla de acceso rápido está asociada con una ventana
★WM_QUERYDRAGICON Este mensaje se envía a una ventana minimizada. Cuando esta ventana está a punto de ser arrastrada y soltada y no hay ningún ícono definido en su clase, la aplicación puede devolver un ícono o identificador de cursor. El sistema muestra este ícono o cursor cuando el. El usuario arrastra y suelta el icono.
★WM_COMPAREITEM Envíe este mensaje para determinar la posición relativa de los elementos recién agregados en el cuadro combinado o cuadro de lista
★WM_COMPACTING muestra que la memoria es muy baja.
★WM_WINDOWPOSCHANGING Envíe este mensaje a la función setwindowpos u otras funciones de administración de ventanas cuando el tamaño y la posición de la ventana estén a punto de cambiarse.
★WM_WINDOWPOSCHANGED Envíe este mensaje a la función setwindowpos u otras funciones de administración de ventanas cuando se haya cambiado el tamaño y la posición de la ventana.
★WM_POWER Este mensaje se envía cuando el sistema está a punto de entrar en estado de pausa.
★WM_COPYDATA Este mensaje se envía cuando una aplicación pasa datos a otra aplicación
★WM_CANCELJOURNA Cuando un usuario cancela el estado de activación del registro del programa, envíe este mensaje al programa
★WM_NOTIFY Cuando ocurre un evento de un control o el control necesita obtener alguna información, este mensaje se envía a su ventana principal.
★WM_INPUTLANGCHANGEREQUEST Cuando el usuario selecciona un idioma de entrada, o la tecla de acceso rápido del idioma de entrada cambia
★WM_INPUTLANGCHANGE Este mensaje se envía a la ventana de nivel superior afectada cuando se cambia la escena de la plataforma.
★WM_TCARD Este mensaje se envía a la aplicación cuando el programa ha inicializado la rutina de ayuda de Windows.
★WM_HELP Este mensaje muestra que el usuario presionó F1. Si un menú está activado, este mensaje se enviará al menú asociado con esta ventana. De lo contrario, se enviará a la ventana con foco. Se enviará un mensaje para la ventana actualmente activa.
★WM_USERCHANGED Este mensaje se envía a todas las ventanas después de que el usuario haya iniciado o cerrado sesión. Cuando el usuario inicia o cierra sesión, el sistema actualiza la información de configuración específica del usuario. El sistema envía este mensaje inmediatamente cuando el usuario actualiza la configuración.
★WM_NOTIFYFORMAT Los controles públicos, los controles personalizados y sus ventanas principales usan este mensaje para determinar si el control usa una estructura ANSI o UNICODE.
función EnumChildWindowsProc(hwnd, lparam: Integer): Boolean; var buffer: matriz[0..255] de char; comenzar Resultado:= GetClassName(hwnd,buffer,256); comenzar EnviarMensaje(hwnd,WM_GETTEXT,256,lparam Resultado:=Falso; finalizar; procedimiento TForm1.Button1Click(Remitente: TObject); var hwnd: Integer; buffer: array[0..255] of char; Begin hwnd := FindWindow('CabinetWClass',nil); (hwnd,@EnumChildWindowsProc,Longint(@buffer[0])); StrPas(búfer); fin;