Comment contrôler d'autres fenêtres d'application dans Delphi
Comment contrôler d'autres fenêtres d'application dans Delphi
Chen Jianbing, Collège des cadres de gestion agricole du Guangdong
L'écriture d'applications Delphi implique souvent des opérations sur d'autres applications Windows. Par exemple, dans un système de gestion de base de données, si le personnel financier a besoin d'utiliser une calculatrice, il peut appeler la fonction de calculatrice incluse dans Windows. Chaque fois qu'il l'utilise, il doit ouvrir la calculatrice via « Démarrer/Programmes/Accessoires/Calculatrice ». Évidemment, c'est très fastidieux. Bien sûr, vous pouvez envisager de créer un raccourci vers "Calculatrice" sur le bureau et de définir un raccourci clavier. Lorsque vous devez utiliser la calculatrice, appuyez sur ce raccourci clavier pour ouvrir la "Calculatrice". Cependant, étant donné que « Calculatrice » est un programme de fenêtre « non modal », c'est-à-dire qu'à chaque exécution de la calculatrice, une fenêtre « Calculatrice » s'ouvrira. Le résultat est que des dizaines de « calculatrices » apparaissent sur le bureau, et non. seul un grand nombre augmente la surcharge de mémoire du système et est peu pratique à utiliser pour les utilisateurs. Il peut être facilement contrôlé dans Delphi et l'effet est parfait. Les modalités de mise en œuvre sont proposées ci-dessous pour deux problématiques principales.
1. Comment contrôler le design ?
Créez un nouveau formulaire, placez deux boutons dans le formulaire, leurs légendes sont "Ouvrir" (c'est-à-dire démarrer la "calculatrice") et "Fermer" (sortie et fin), et ajoutez respectivement le traitement des événements Click. Voir le formulaire Form1 et le fichier unitaire Unit1 pour plus de détails.
Parmi eux, les déclarations les plus importantes sont :
fwnd:=FindWindow('SciCalc','Calculatrice');
Le prototype de la fonction est (voir l'aide de Delphi pour plus de détails) :
HWND FindWindow(
LPCTSTR lpClassName, // pointeur vers le nom de la classe
LPCTSTR lpWindowName // pointeur vers le nom de la fenêtre
);
Ici, 'SciCalc' est le nom de classe de la calculatrice et 'Calculator' est le titre de la fenêtre de la calculatrice}
setWindowPos(fwnd,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW ou SWP_NOSIZE ou SWP_NOMOVE);
Le prototype de fonction est :
BOOL SetWindowPos(
HWND hWnd, // handle de fenêtre
HWND hWndInsertAfter, // handle d'ordre de placement
int X, // position horizontale
int Y, // position verticale
int cx, // largeur
int cy, // hauteur
UINT uFlags // drapeaux de positionnement de fenêtre
);
ShowWindow(fwnd,SW_RESTORE); //Afficher la "calculatrice" ouverte
Le prototype de fonction est :
BOOL ShowWindow(
HWND hWnd, // handle de fenêtre
int nCmdShow // affiche l'état de la fenêtre
);
Ret:=WinExec('c:windowscalc.exe',SW_SHOWNORMAL); //Démarrer la calculatrice
Le prototype de fonction est :
UINT WinExec(
LPCSTR lpCmdLine, // adresse de la ligne de commande
UINT uCmdShow // style de fenêtre pour une nouvelle application
);
Exécutez le programme Calculatrice et vérifiez la valeur de retour (utilisant ainsi la valeur de retour pour déterminer les erreurs possibles)
2. Comment clarifier le « nom de classe » de l'application ?
Pour contrôler une application, vous devez d'abord clarifier le « nom de classe » de l'application. Le concept de « classe » est déjà très clair dans les programmes Delphi. Par exemple, créez un nouveau formulaire Form1, et le « nom de classe » du formulaire est TForm1. Alors, comment déterminer le « nom de classe » d’autres programmes Windows ?
Heureusement, Delphi propose un outil pratique appelé Winsight, qui est comme un miroir qui révèle les « noms de classe » des monstres où qu'ils se trouvent.
Comment utiliser Winsight est le suivant :
⑴ Exécutez Winsight (le nom du programme est ws32.exe, dans le même répertoire que le fichier principal delphi32.exe), voir Figure ① ;
⑵ Sélectionnez « Follow Focus » dans « Spy » dans le menu Winsight, comme le montre la figure ② ;
⑶Exécutez le programme « calculatrice » ;
⑷La cible est affichée dans Winsight, comme le montre la figure ③.
Environnement logiciel : Win98 chinois/Delphi5.0 chinois.