Cet article explique en détail comment Delphi obtient des handles et envoie des messages sous forme d'exemples. Les instructions d'utilisation spécifiques sont les suivantes :
Recherchez le handle d'une autre fenêtre :
handle := FindWindow(nil,PChar('Titre de la fenêtre'));//Trouver le handle du formulaire
Rechercher des sous-formulaires :
childHandle := FindWindowEx(handle,0,'classe de sous-formulaire','titre du sous-formulaire');
Il existe également une API pour énumérer les sous-formulaires.
EnumChildWindows (descripteur du corps principal, fonction @callback, paramètres utilisateur) ;
Pour utiliser cette fonction, vous devez écrire vous-même une fonction de rappel, telle que :
function EnumChildProc(ahWND:HWND; param:LPARAM):boolean;stdcall;sendmessage(handle,message,wl,rl)
l'unité Unit1 ; l'interface utilise Windows,Messages,Tlhelp32,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls ; tapez TForm1=class(TForm)procedure FormCreate(Sender : TObject) private {Déclarations privées} public {Déclarations publiques} end; var Form1 : TForm1;implémentation{ $R *.DFM}procédure TForm1.FormCreate(Sender: 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('Je suis là pour mesurer')));ShowMessage( IntToStr(h));end;
SendMessage(TreeView.Handle,TVM_SETBKCOLOR,0,RGB(255,0,0)); Définir la couleur d'arrière-plan du téléviseur SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0); Appuyez sur le bouton gauche de la souris SendMessage(Button.Handle,WM_LBUTTONUP); , 0,0); Lever le bouton gauche de la souris SendMessage(Edit.Handle,WM_SETTEXT,255,Integer(PChar('abc'))); Passer le texte SendMessage(Edit.Handle,WM_Char,Wparam('Q'),2); SendMessage( Button.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1); Changer le style du bouton SendMessage(ComboBox.Handle,CB_SETDropPEDWIDTH,300,0);
WM_CUT, WM_COPY et WM_PASTE couper, copier, coller
Implémentez n’importe quelle combinaison de touches :
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);
Description de SendMessageA : Appelez la fonction de fenêtre d'une fenêtre pour envoyer un message à cette fenêtre. Cette fonction ne revient que si le message est traité
SendMessage contient 4 paramètres :
1. La fenêtre de poignée de fenêtre hwnd 32 bits peut être n'importe quel type d'objet d'écran, car Win32 peut conserver les poignées de la plupart des objets visuels.
2. wMsg est une valeur constante utilisée pour distinguer d'autres messages. Ces constantes peuvent être des constantes prédéfinies en unités Windows ou des constantes personnalisées.
3. wParam est généralement une valeur constante liée au message, ou il peut s'agir du handle de la fenêtre ou du contrôle.
4. lParam est généralement un pointeur pointant vers les données en mémoire. Puisque WParm, lParam et Pointer sont tous 32 bits, ils peuvent être convertis les uns dans les autres.
Description détaillée de la fonction wMsg :
★WM_Create crée une fenêtre
★WM_DESTROY Envoyé lorsqu'une fenêtre est détruite
★WM_MOVE Déplacer une fenêtre
★WM_SIZE Changer la taille d'une fenêtre
★WM_ACTIVATE Une fenêtre est activée ou désactivée
★WM_SETFOCUS Une fenêtre obtient le focus
★WM_KILLFOCUS Une fenêtre perd le focus
★WM_ENABLE fait passer une fenêtre à l'état Activer
★WM_SETREDRAW Définissez si la fenêtre peut être redessinée
★WM_SETTEXT L'application envoie ce message pour définir le texte d'une fenêtre
★WM_GETTEXT L'application envoie ce message pour copier le texte de la fenêtre correspondante dans le tampon.
★WM_GETTEXTLENGTH Récupère la longueur du texte lié à une fenêtre (hors caractères nuls)
★WM_PAINT demande à une fenêtre de se repeindre
★WM_CLOSE envoie un signal lorsqu'une fenêtre ou une application doit être fermée.
★WM_QUERYENDSESSION L'utilisateur choisit de fermer la boîte de dialogue ou le programme appelle lui-même la fonction ExitWindows
★WM_QUIT est utilisé pour terminer l'exécution du programme
★WM_QUERYOPEN Lorsque la fenêtre utilisateur est restaurée à sa taille et sa position précédentes, envoyez ce message à une icône
★WM_ERASEBKGND Lorsque le fond de la fenêtre doit être effacé (par exemple, lorsque la fenêtre change de taille)
★WM_SYSCOLORCHANGE Lorsque la couleur du système change, envoyez ce message à toutes les fenêtres de niveau supérieur
★Après le message WM_QUERYENDSESSION, ce message est envoyé à l'application pour lui indiquer si la conversation est terminée.
★WM_SHOWWINDOW Ce message est envoyé à cette fenêtre lorsque la fenêtre est masquée ou affichée.
★WM_ACTIVATEAPP envoie ce message à l'application quelle fenêtre est active et laquelle est inactive.
★WM_FONTCHANGE Ce message est envoyé à toutes les fenêtres de niveau supérieur lorsque la bibliothèque de ressources de polices du système change.
★WM_TIMECHANGE Envoie ce message à toutes les fenêtres de niveau supérieur lorsque l'heure du système change
★WM_CANCELMODE Envoyer ce message pour annuler un mode (opération) en cours
★WM_SETCURSOR Si la souris provoque le déplacement du curseur dans une fenêtre
★WM_ENDSESSION Lorsque le processus système présente des problèmes et que l'entrée de la souris n'est pas capturée, un message est envoyé à une fenêtre.
★WM_MOUSEACTIVATE envoie ce message à la fenêtre actuelle lorsque le curseur se trouve dans une fenêtre inactive et que l'utilisateur appuie sur un bouton de la souris.
★WM_CHILDACTIVATE Envoie ce message à la fenêtre enfant MDI lorsque l'utilisateur clique sur la barre de titre de cette fenêtre, ou lorsque la fenêtre est activée, déplacée ou redimensionnée
★WM_QUEUESYNC Ce message est envoyé par un programme de formation informatisé et le message d'entrée utilisateur est séparé par le programme hook de WH_JOURNALPALYBACK
★WM_GETMINMAXINFO Ce message est envoyé à la fenêtre lorsqu'elle est sur le point de changer de taille ou de position.
★WM_PAINTICON Envoyé vers une fenêtre réduite lorsque son icône est sur le point d'être redessinée
★WM_ICONERASEBKGND Ce message est envoyé vers une fenêtre réduite uniquement si son fond doit être redessiné avant de dessiner l'icône.
★WM_NEXTDLGCT★Envoyez ce message à un programme de boîte de dialogue pour modifier la position du focus
★WM_SPOOLERSTATUS Ce message est émis chaque fois qu'un travail est ajouté ou soustrait de la file d'attente de gestion d'impression.
★WM_DRAWITEM Envoyé lorsque l'apparence visuelle d'un bouton, d'une zone de liste déroulante, d'une zone de liste ou d'un menu change
★WM_MEASUREITEM Lorsqu'un bouton, une zone de liste déroulante, une zone de liste, un contrôle ListView ou un élément de menu est créé
★WM_VKEYTOITEM Ce message a un style LBS_WANTKEYBOARDINPUT émis à son propriétaire en réponse au message WM_KEYDOWN
★WM_CHARTOITEM Ce message est envoyé par une list box de style LBS_WANTKEYBOARDINPUT à son propriétaire en réponse au message WM_CHAR
★WM_SETFONT Lors du dessin du texte, le programme envoie ce message pour obtenir la couleur à utiliser par le contrôle.
★WM_GETFONT L'application envoie ce message pour récupérer la police du texte dessiné par le contrôle courant.
★WM_SETHOTKEY L'application envoie ce message pour associer une fenêtre à un raccourci clavier.
★WM_GETHOTKEY L'application envoie ce message pour déterminer si le raccourci clavier est associé à une fenêtre
★WM_QUERYDRAGICON Ce message est envoyé à une fenêtre réduite. Lorsque cette fenêtre est sur le point d'être glissée et déposée et qu'aucune icône n'est définie dans sa classe, l'application peut renvoyer une icône ou une poignée de curseur. Le système affiche cette icône ou ce curseur. l'utilisateur glisse et dépose l'icône.
★WM_COMPAREITEM Envoyez ce message pour déterminer la position relative des éléments nouvellement ajoutés dans la liste déroulante ou la liste
★WM_COMPACTING indique que la mémoire est très faible.
★WM_WINDOWPOSCHANGING Envoie ce message à la fonction setwindowpos ou à d'autres fonctions de gestion de fenêtres lorsque la taille et la position de la fenêtre sont sur le point d'être modifiées.
★WM_WINDOWPOSCHANGED Envoie ce message à la fonction setwindowpos ou à d'autres fonctions de gestion de fenêtres lorsque la taille et la position de la fenêtre ont été modifiées.
★WM_POWER Ce message est envoyé lorsque le système est sur le point d'entrer dans l'état de pause.
★WM_COPYDATA Ce message est envoyé lorsqu'une application transmet des données à une autre application
★WM_CANCELJOURNA Lorsqu'un utilisateur annule l'état d'activation du journal du programme, soumettez ce message au programme
★WM_NOTIFY Lorsqu'un événement d'un contrôle s'est produit ou que le contrôle a besoin d'obtenir des informations, ce message est envoyé à sa fenêtre parent.
★WM_INPUTLANGCHANGEREQUEST Lorsque l'utilisateur sélectionne une langue de saisie ou que le raccourci clavier de la langue de saisie change
★WM_INPUTLANGCHANGE Ce message est envoyé à la fenêtre de niveau supérieur concernée lorsque la scène de la plate-forme a été modifiée.
★WM_TCARD Ce message est envoyé à l'application lorsque le programme a initialisé la routine d'aide de Windows.
★WM_HELP Ce message indique que l'utilisateur a appuyé sur F1. Si un menu est activé, ce message sera envoyé au menu associé à cette fenêtre. Sinon, il sera envoyé à la fenêtre avec le focus. un message sera envoyé pour la fenêtre actuellement active.
★WM_USERCHANGED Ce message est envoyé à toutes les fenêtres après que l'utilisateur s'est connecté ou déconnecté. Lorsque l'utilisateur se connecte ou se déconnecte, le système met à jour les informations de configuration spécifiques de l'utilisateur. Le système envoie ce message immédiatement lorsque l'utilisateur met à jour les paramètres.
★WM_NOTIFYFORMAT Les contrôles publics, les contrôles personnalisés et leurs fenêtres parentes utilisent ce message pour déterminer si le contrôle utilise la structure ANSI ou UNICODE.
function EnumChildWindowsProc(hwnd, lparam : Integer) : Boolean ; var buffer : array[0..255] of char ; start Result := TrueClassName(hwnd,buffer,256); commencer SendMessage(hwnd,WM_GETTEXT,256,lparam); Résultat :=False ; fin; procédure TForm1.Button1Click(Sender: TObject); var hwnd: Integer; buffer: array[0..255] of char; Begin hwnd := FindWindow('CabinetWClass',nil); (hwnd,@EnumChildWindowsProc,Longint (@buffer[0])); Légende := StrPas(tampon); fin;