L'automatisation est une méthode permettant de contrôler automatiquement une application à partir d'une autre application, comme le code ci-dessous.
PRécédure Créer un nouveau mot ;
var
WordObj : variante ;
commencer
WordObj := CreateOleObject('Word.Basic'); {Cette fonction est déclarée dans l'unité ComObj}
WordObj.AppShow ;
WordObj.FileNew ;
fin;
Ce code ouvrira WORD et créera automatiquement un nouveau document (bien sûr, le principe est que WORD est installé sur votre machine. Cela semble très intéressant et une fonction très utile. Alors, comment notre programme peut-il également avoir des fonctions d'automatisation similaires à WORD). permettre aux programmes développés dans n'importe quel autre langage d'automatiser nos programmes ? C'est très simple à mettre en œuvre avec DELPHI.
Cet article expliquera étape par étape comment développer un serveur d'automatisation simple avec des exemples.
Créez une nouvelle application ordinaire et enregistrez le projet sous AutoSrv.bpr. Placez un contrôle d'édition sur le formulaire principal et enregistrez-le sous MainForm.pas. Ici, nous prévoyons d'ajouter le titre de la fenêtre, la couleur du formulaire et de contrôler automatiquement le texte du formulaire. Contrôle d'édition (bien sûr, cela implémente très peu de fonctions, mais c'est suffisant pour expliquer comment développer un programme serveur automatisé), ajoutez le code suivant à la fenêtre principale : (Remarque : veuillez ajouter les déclarations de ces fonctions et procédures à TForm1 seul dans l'espace public)
fonction TForm1.GetCaption : chaîne ;
commencer
résultat := Self.Caption;
fin;
procédure TForm1.SetCaption(ACaption: chaîne);
commencer
Self.Caption := ACaption;
fin;
procédure TForm1.SetColor(AColor: TColor);
commencer
Self.Color := AColor;
fin;
procédure TForm1.SetEditText(AText: string);
commencer
Self.Edit1.Text := AText;
fin;
Ajoutons ensuite des fonctions d'automatisation à ce programme, cliquez sur le bouton Nouveaux éléments, cliquez sur l'onglet ActiveX dans la fenêtre contextuelle Nouveaux éléments, sélectionnez Objet d'automatisation, cliquez sur le bouton OK et entrez le nom de la coclasse dans l'assistant d'objet d'automatisation contextuel. fenêtre MyAutoSrv, Delphi générera automatiquement un fichier AutoSrv_TLB.pas (bibliothèque de classes) et une unité qui implémente la classe d'interface de bibliothèque de classes, et enregistrera cette nouvelle unité sous AutoSrvClass.pas.
Maintenant que ce programme est devenu un serveur automatisé, ajoutons-lui des fonctions d'interface automatisées :
(1) Cliquez sur le menu Affichage-> Bibliothèque de types, sélectionnez l'interface IMyAutoSrv dans l'éditeur de bibliothèque de types, cliquez sur Nouvelle propriété, sélectionnez sa propriété comme Lecture | Écriture, nommez-la Légende et définissez le type sur BSTR.
(2) Cliquez sur Nouvelle méthode, nommez-la SetColor, cliquez sur l'onglet Paramètres à droite, cliquez sur AJOUTER pour ajouter un paramètre à la fonction d'interface nouvellement ajoutée, définissez le nom du paramètre sur AColor et définissez le paramètre Type sur OLE_COLOR.
(3) Cliquez à nouveau sur Nouvelle méthode, nommez-la SetEditText, ajoutez-y un paramètre en utilisant la méthode ci-dessus, définissez le nom du paramètre sur AText et définissez le paramètre Type sur BSTR.
Enfin, ajoutez le code d’implémentation de la fonction d’interface et c’est OK :
Ajoutez MainForm dans la section Uses de AutoSrvClass.pas et remplacez son code par le code suivant.
unité AutoSrvClass ;
{$WARN SYMBOL_PLATFORM DÉSACTIVÉ}
interface
utilise
ComObj, ActiveX, AutoSrv_TLB, StdVcl, MainForm ;
taper
TMyAutoSrv = classe (TAutoObject, IMyAutoSrv)
protégé
fonction Get_Caption : WideString ;
procédure Set_Caption (const Value : WideString );
procédure SetColor(AColor: OLE_COLOR); safecall;
procédure SetEditText(const AText: WideString);
fin;
mise en œuvre
utilise ComServ ;
fonction TMyAutoSrv.Get_Caption : WideString ;
commencer
Résultat := Form1.GetCaption;
fin;
procédure TMyAutoSrv.Set_Caption(const Value: WideString);
commencer
Form1.SetCaption(Valeur);
fin;
procédure TMyAutoSrv.SetColor(AColor: OLE_COLOR);
commencer
Form1.SetColor(AColor);
fin;
procédure TMyAutoSrv.SetEditText(const AText: WideString);
commencer
Form1.SetEditText(AText);
fin;
initialisation
TAutoObjectFactory.Create(ComServer, TMyAutoSrv, Class_MyAutoSrv,
ciMultiInstance, tmApartment);
fin.
Exécutez ce programme une fois et il s'enregistrera automatiquement en tant que serveur d'automatisation. Vous pouvez trouver ses informations d'enregistrement associées sous la clé primaire HKEY_CLASSES_ROOT dans le registre.
Ce qui précède montre comment développer un serveur d'automatisation, que nous appellerons ici.
Créez un nouveau programme, ajoutez un Button et déclarez une variable Variant dans sa zone VAR : AutoSrv : variante
Ajoutez ensuite le code suivant à Button1.
procédure TForm1.Button1Click(Expéditeur : TObject);
commencer
AutoSrv := CreateOleObject('AutoSrv.MyAutoSrv'); {Cette chaîne est le nom du projet du serveur d'automatisation plus le nom de la CoClass}
Self.Caption := AutoSrv.Caption;
AutoSrv.Caption := 'HEHE';
AutoSrv.SetColor(CLRed);
AutoSrv.SetEditText('HAHA');
fin;
La fonction CreateOleObject renverra une interface de type IDispatch. C'est l'interface IDispatch qui permet à notre programme d'effectuer des connexions tardives aux appels à l'interface serveur automatisée. Par exemple, si on ajoute un AutoSrv.Hello ci-dessus, le programme peut également être compilé et. réussi.Mais une erreur se produira lors de l'exécution.L'efficacité d'exécution de l'utilisation de Variant sera plus lente que celle de l'utilisation directe de la déclaration d'interface.
Exécutez et cliquez sur le bouton, vous pouvez voir que le programme de service automatisé est chargé et que la couleur du formulaire et la chaîne dans EDIT1 sont définies selon notre code Haha, est-ce très simple ?