La automatización es un método para controlar automáticamente una aplicación desde otra aplicación, como el código siguiente.
Procedimiento CrearNuevaPalabra;
var
WordObj: Variante;
comenzar
WordObj := CreateOleObject('Word.Basic'); {Esta función se declara en la unidad ComObj}
WordObj.AppShow;
WordObj.FileNew;
fin;
Este código abrirá WORD y creará automáticamente un nuevo documento (por supuesto, la premisa es que WORD esté instalado en su máquina). Esto parece una función muy interesante y muy útil. Entonces, ¿cómo puede nuestro programa tener funciones de automatización Can similares a WORD? ¿Permitir que programas desarrollados en cualquier otro lenguaje automaticen nuestros programas? Es muy sencillo implementarlo con DELPHI.
Este artículo explicará paso a paso cómo desarrollar un servidor de automatización simple con ejemplos.
Cree una nueva aplicación normal y guarde el proyecto como AutoSrv.bpr. Coloque un control de edición en el formulario principal y guárdelo como MainForm.pas. Aquí planeamos agregar el título de la ventana, el color del formulario y controlar automáticamente el texto del. Edite el control (por supuesto, esto implementa muy pocas funciones, pero es suficiente para explicar cómo desarrollar un programa de servidor automatizado), agregue el siguiente código a la ventana principal: (Nota: agregue las declaraciones de estas funciones y procedimientos a TForm1 por ti mismo área pública)
función TForm1.GetCaption: cadena;
comenzar
resultado: = Auto.Caption;
fin;
procedimiento TForm1.SetCaption(ACaption: cadena);
comenzar
Auto.Caption:= ACaption;
fin;
procedimiento TForm1.SetColor(AColor: TColor);
comenzar
Auto.Color := AColor;
fin;
procedimiento TForm1.SetEditText(AText: cadena);
comenzar
Self.Edit1.Text := AText;
fin;
Luego agreguemos funciones de automatización a este programa, haga clic en el botón Nuevos elementos, haga clic en la pestaña ActiveX en la ventana emergente Nuevos elementos, seleccione Objeto de automatización, haga clic en el botón Aceptar e ingrese el nombre de CoClass en el Asistente de objetos de automatización emergente. ventana MyAutoSrv, Delphi generará automáticamente un archivo AutoSrv_TLB.pas (biblioteca de clases) y una unidad que implementa la clase de interfaz de la biblioteca de clases, y guardará esta nueva unidad como AutoSrvClass.pas.
Ahora que este programa se ha convertido en un servidor automatizado, agreguemos funciones de interfaz automatizadas:
(1) Haga clic en el menú Ver->Biblioteca de tipos, seleccione la interfaz IMyAutoSrv en el Editor de biblioteca de tipos, haga clic en Nueva propiedad, seleccione su propiedad como Lectura|Escritura, asígnele el nombre Título y establezca el Tipo en BSTR.
(2) Haga clic en Nuevo método, asígnele el nombre SetColor, haga clic en la pestaña Parámetros a la derecha, haga clic en AGREGAR para agregar un parámetro a la función de interfaz recién agregada, establezca el nombre del parámetro en AColor y establezca el tipo de parámetro en OLE_COLOR.
(3) Haga clic en Nuevo método nuevamente, asígnele el nombre SetEditText, agréguele un parámetro usando el método anterior, establezca el nombre del parámetro en AText y establezca el parámetro Tipo en BSTR.
Finalmente, agregue el código de implementación de la función de interfaz y estará bien:
Agregue MainForm en la sección Usos de AutoSrvClass.pas y cambie su código al siguiente código.
unidad AutoSrvClass;
{$WARN SYMBOL_PLATFORM APAGADO}
interfaz
usos
ComObj, ActiveX, AutoSrv_TLB, StdVcl, MainForm;
tipo
TMyAutoSrv = clase(TAutoObject, IMyAutoSrv)
protegido
función Get_Caption: WideString; llamada segura;
procedimiento Set_Caption (valor constante: WideString);
procedimiento SetColor(AColor: OLE_COLOR);
procedimiento SetEditText(const AText: WideString);
fin;
implementación
utiliza ComServ;
función TMyAutoSrv.Get_Caption: WideString;
comenzar
Resultado := Form1.GetCaption;
fin;
procedimiento TMyAutoSrv.Set_Caption (Valor constante: WideString);
comenzar
Formulario1.SetCaption(Valor);
fin;
procedimiento TMyAutoSrv.SetColor(AColor: OLE_COLOR);
comenzar
Formulario1.SetColor(AColor);
fin;
procedimiento TMyAutoSrv.SetEditText(const AText: WideString);
comenzar
Form1.SetEditText(AText);
fin;
inicialización
TAutoObjectFactory.Create(ComServer, TMyAutoSrv, Class_MyAutoSrv,
ciMultiInstancia, tmApartamento);
fin.
Ejecute este programa una vez y se registrará automáticamente como servidor de automatización. Puede encontrar la información de registro relacionada en la clave principal HKEY_CLASSES_ROOT en el registro.
Lo anterior demuestra cómo desarrollar un servidor de automatización, al que llamaremos aquí.
Cree un nuevo programa, agregue un Botón y declare una variable Variante en su área VAR: AutoSrv: variante
Luego agregue el siguiente código al Botón1.
procedimiento TForm1.Button1Click (Remitente: TObject);
comenzar
AutoSrv := CreateOleObject('AutoSrv.MyAutoSrv'); {Esta cadena es el nombre del proyecto del servidor de automatización más el nombre de CoClass}
Auto.Caption := AutoSrv.Caption;
AutoSrv.Caption := 'HEHE';
AutoSrv.SetColor(CLRed);
AutoSrv.SetEditText('JAJA');
fin;
La función CreateOleObject devolverá una interfaz de tipo IDispatch. Es la interfaz IDispatch la que permite a nuestro programa realizar conexiones tardías a llamadas a la interfaz del servidor automatizado. Por ejemplo, si agregamos un AutoSrv.Hello arriba, el programa también se puede compilar y. pasado, pero se producirá un error durante la ejecución. La eficiencia de ejecución de usar Variant será más lenta que usar la declaración de interfaz directamente.
Ejecute y haga clic en el botón, puede ver que el programa de servicio automatizado está cargado y el color del formulario y la cadena en EDIT1 están configurados de acuerdo con nuestro código Jaja, ¿es muy simple?