Red de conocimiento informático - Conocimiento de la instalación - Buscando un ejemplo de cómo C++ intercepta un nombre de dominio

Buscando un ejemplo de cómo C++ intercepta un nombre de dominio

- --Puerta trasera API de Borland C++ Builder

---- Introducción

---- C++ Builder es digno de ser un excelente producto de Borland Company Es muy rápido y eficiente para desarrollar programas de Windows, pero también encontrarás algunas limitaciones durante el proceso de programación, que te impedirán hacer realidad tus ideas. Por ejemplo, no puede modificar el menú del sistema del formulario; por ejemplo, cuando usa la barra de seguimiento, no puede encontrar los eventos StartTrack y EndTrack, pero su programa necesita estos dos eventos. En la programación API de Windows, no tendrá estos problemas. Sólo necesita procesar los mensajes WM_SYSCOMMAND y WM_HSCROLL (o WM_VSCROLL) para lograr las funciones anteriores. La desventaja de la API de Windows es que la programación es muy problemática y se dedica demasiado tiempo a los detalles, pero su función es la más poderosa. El VCL de C++ Builder es solo un subconjunto de él en función, porque VCL está encapsulado sobre la base de API y algunas funciones que no se usan comúnmente se descartan durante la encapsulación. Sin embargo, la imaginación de los programadores no ha quedado plasmada, siempre tienen mayor entusiasmo para realizar ideas ingeniosas. Modificar el menú del sistema y añadir eventos StartTrack y ndTrack a la barra de seguimiento son sólo algunos de los trucos. Pero VCL no tiene estas funciones, ¿qué debo hacer?

---- Afortunadamente, Borland no bloqueó el camino, sino que dejó una puerta trasera, lo que permitió a los programadores interceptar y procesar mensajes de Windows ellos mismos, al igual que la programación API. Entonces, hay una manera...

---- Método

---- Interceptar mensajes de Windows requiere los siguientes pasos:

--- - En el archivo de encabezado del formulario (como Unit1.h)

---- 1. Establezca una tabla de mapeo de mensajes en la declaración de clase y entregue el poder de procesamiento de un determinado mensaje al procesamiento de mensajes personalizado. función.

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER (nombre del mensaje de Windows, TMessage, nombre de la función de procesamiento de mensajes)

MESSAGE_HANDLER(...)

END_MESSAGE_MAP ( TForm)

---- 2. Declare la función de procesamiento de mensajes en el área privada de la declaración de clase.

privado: // Declaraciones de usuario

void __fastcall nombre de la función de procesamiento de mensajes (TMessage &Message

En el archivo de formulario (como Unit1.cpp)

p>

---- 3. Escriba la función de procesamiento de mensajes e implemente las funciones que necesita aquí.

Por ejemplo

void __fastcall MainForm::OnWMHScroll (TMessage &Message)

{

... // Agrega tu propio código aquí

TForm::Dispatch(&Message);

}

---- Explicación

---- 1. Acerca de TMessage

---- TMessage es una estructura predefinida de VCL, definida de la siguiente manera:

struct TMessage

{

unsigned int Msg //Message

p>

int WParam; //Parámetro de palabra

int LParam; //Parámetro de palabra larga

int Resultado;

---- 2. Acerca de TForm::Dispatch(&Message)

---- Es mejor agregar TForm::Dispatch(&Message) al final del archivo personalizado Función de procesamiento de mensajes, la función de esta oración es mantener el mensaje. Sin esta oración, el mensaje será completamente interceptado y es posible que la clase VCL no pueda realizar funciones normales porque no puede recibir el mensaje.

---- Ejemplo 1: Modificar el menú del sistema

---- En algunos programas, la ventana principal es muy pequeña y no hay ningún menú si desea agregar. un cuadro de diálogo Acerca de o Configuración. La mejor manera es usar el menú del sistema. En la programación API de Windows, modificar el menú del sistema es lo mismo que implementar otras funciones. No es fácil ni difícil. Sin embargo, en C++ Builder, la clase de formulario (TForm) no proporciona propiedades ni métodos relacionados con el menú del sistema. Es fácil implementar otras funciones, pero parece difícil modificar el menú del sistema.

---- Afortunadamente, Borland permite a los programadores manejar los mensajes de Windows por sí mismos, ¡así que llega la oportunidad!

1. Utilice las funciones de la API de Windows para modificar el menú del sistema.

Suponiendo que el formulario se llame MainForm, configure la función MainForm::OnCreate():

1. Utilice GetSystemMenu( MainForm->Handle, false) para obtener el identificador del menú del sistema;

2. Utilice las funciones AppendMenu, DeleteMenu y ModifyMenu para modificar el menú del sistema y asignar el nuevo número de ID al personalizado. elemento del menú.

Cuando ejecuta el programa en este momento, puede ver que el menú del sistema también se ha modificado, pero no se puede responder a los elementos del menú personalizado.

2. Interceptar mensajes WM_SYSCOMMAND para responder a elementos de menú personalizados

En el archivo de encabezado del formulario (como Unit1.h)

1. class Agregue la tabla de respuesta del mensaje al final para obtener los derechos de procesamiento del mensaje WM_SYSCOMMAND

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_SYSCOMMAND,TMessage,OnWMSysCommand)

END_MESSAGE_MAP( TForm)

2. Agregar declaración de función de procesamiento de mensajes en el área privada definida en la clase de formulario

private: // Declaraciones de usuario

void __fastcall OnWMSysCommand(TMessage& Message);

En el archivo de formulario (como Unit1.h)

3. Escriba la función de respuesta del mensaje

void __fastcall TForm1::OnWMSysCommand(TMessage&). Mensaje)

{

if(Message.WParam==ID_SysMenu_MyItem)

{

// Tu código aquí, haz algo

}

TForm::Dispatch(&Message);

}

3. Ejemplo completo de programa

Ejemplo 2: Añade eventos OnStartTrack y OnEndTrack

Cuando la barra de seguimiento se utiliza para controlar el progreso, es probable que OnStartTrack y OnEndTrack sean los eventos que necesitas. Por ejemplo, al controlar el progreso de la reproducción multimedia, cuando el usuario mueve el control deslizante, necesita el evento OnStartTrack para detener la reproducción y el evento OnEndTrack para ubicar la nueva posición de reproducción. Sin embargo, Borland no proporcionó estos dos eventos, por lo que los entusiastas de la programación tuvimos que confiar en nuestros propios esfuerzos para interceptar los mensajes de Windows.

1. Intercepte el mensaje WM_HSCROLL y agregue los eventos OnStartTrack y OnEndTrack a la barra de seguimiento.

En el archivo de encabezado del formulario (como Unit.h)

1. En el formulario Agregue la tabla de respuesta de mensajes al final de la definición de clase y entregue el poder de procesamiento de mensajes WM_HSCROLL a la función OnWMHScroll.

BEGIN_MESSAGE_MAP

MESSAGE_HANDLER(WM_HSCROLL,TMessage,OnWMHScroll)

END_MESSAGE_MAP(TForm)

2. clase de formulario Agregue la declaración de función OnWMHScroll.

privado: // Declaraciones de usuario

void __fastcall OnWMHScroll(TMessage &Message);

3. Agrega las funciones StartTrack y EndTrack en el área privada definida por el. formar declaración de clase.

privado: // Declaraciones de usuario

void __fastcall TrackBar1StartTrack(TObject *Sender

void __fastcall TrackBar1EndTrack(TObject *Sender

<); p>En el archivo de formulario (como Unit.cpp)

4. Escriba la función OnWMHScroll para que pueda llamar a las funciones StartTrack y EndTrack de acuerdo con los parámetros del mensaje y generar los eventos OnStartTrack y OnEndTrack. .

5. Escribe las funciones StartTrack y EndTrack.

Si es una barra de seguimiento vertical, cambie el WM_HSCROLL de arriba a WM_VSCROLL.

2. Ejemplo completo del programa

Epílogo

En la programación de Borland C++ Builder, interceptar mensajes de Windows es una tecnología de programación avanzada que le permite explorar Windows tanto como sea posible. posible. El potencial es especialmente reconfortante para los programadores que han utilizado la programación API. La interceptación de mensajes de Windows es la etapa en la que la API puede desempeñar su función completa. Cuando VCL no puede hacer nada por usted, piense en la API subyacente.