SiZiOUS
Messages postés69Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 novembre 2006
-
21 avril 2004 à 21:24
shell13010
Messages postés73Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention12 mai 2013
-
17 févr. 2010 à 02:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
pour TComboBox c'est un peut différent mais ça fonctionne :
Var S : String;
begin
S := 'Item2';
SendMessage(ComboBox1.Handle, CB_SELECTSTRING, -1 , LongInt(S));
end;
Je l'ai fait en locale mais ça fonctionne aussi sur une autre application
Et si c'est une TListBox :
SendMessage(ListBox1.Handle, LB_SELECTSTRING, -1 , LongInt(S));
wParam définit à partir de quel index la recherche commence ...
-1 signifie toute la liste
kacola
Messages postés30Date d'inscriptionjeudi 27 mai 2004StatutMembreDernière intervention10 janvier 2008 19 mai 2007 à 15:10
Bonjour,
Je cherche à prendre le contrôle d'une application, mais j'ai juste un petit problème, je prends bien le contrôle des boutons, Tedit, mais je n'arrive pas à changer le texte d'un Combobox.
C'est un Combobox qui n'a le choix qu'entre 'Plateau' et 'Chargeur de documents' (c'est pour mon scanner)
J'ai essayé d'envoyer la key 'VK_Down'.
J'ai essayé d'envoyer le texte 'Chargeur de documents': SendMessage(ComboHandle,WM_SETTEXT,0,DWord(Pchar('Chargeur de documents')))
Mon 'ComboHandle' est bon (vérifié avec un autre prog).
Mais rien ne marche, il reste sur 'Plateau'!.
J'ai besoin de votre aide.
Kacola
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 15 janv. 2005 à 22:08
ca y ai j'ai trouver
après avoir chercher bocou !
la solution tien en 3 lettres = (nil).
je posterai ma source bientot.
Salut
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 14 janv. 2005 à 19:09
Salut,
ce que je cherchais à faire c'est une source ki comme
son nom l'indique:
Controler une application externet par script.
Exemple:
tu fai un fichier text.txt comme suit:
Fen: Calculatrice
Bt : 5
bt : +
bt : 2
bt : entré
et tu fait LeProg.exe text.txt
et ca ferai sur la fenetre calculatrice, 5+2 entré
Filipe
PS: je chercher encore
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 31 déc. 2004 à 09:11
Le tout est de retrouver le handle du Edit qui t'intéresse :
- Enumérer les fenêtres principales : fonction EnumWindows
- Choisir la bonne (nom de la fenêtre) -> handle HndlMain
- Enumérer (récursivement) les controles fenêtrés enfants : fonction HndlChild:=GetWindow(HndlMain,GW_CHILD)
- Trier les TEdit : fonction GetClassName(HndlChild,...,...)
- Trouver le bon !!!!!
ou utiliser un programme WinSight32 (fourni avec Delphi (?)) ou OpenForms et recopier la valeur du handle (qui est modifié à chaque exécution)
Pour l'aide en français, demande à Google !
Ken@vo
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 30 déc. 2004 à 22:47
Sinon sait tu ou je peux trouver une aide en francais
qui parle des handle, WM_Gettext, WM_copy...etc...
En solution compliké comment fodrait il faire ?
Filipe
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 29 déc. 2004 à 16:05
Ptit bug,
Ton programme arrive à trouver les TEdit de simul car tu connais
leurs valeurs (.text) de départ:
Lors de la création de Simul (dans Delphi) lorsque je met par ex:
Edit1.text à 'Kenavo' au lieu de ''
L'Edit1 ne sera pas modifier ! (les autres si car toujour '' )
Comment faire pour ne plus avoir ce problème ?
Car on ne connait pas dans la plupart des cas comment à été fait le prog externe.
Une solution ? Simple de préférence.
Filipe
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 28 déc. 2004 à 22:32
7/10 Bravo Kenavo !
Bonne source
Filipe
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 28 déc. 2004 à 08:35
Pour vérifier (ou simplement lire) le contenu d'un TEdit, on ne peut pas utiliser la fonction GetWindowText, le TEdit faisant partie d'un process externe à notre propre appli. Il faut utiliser le message WM_GETTEXT :
function LitTEdit(EditHandle : THandle) : string;
var
p : PChar;
i : Integer;
begin
p := StrAlloc(256);
i := SendMessage(EditHandle,WM_GETTEXT,256,integer(p));
Result := String(P);
StrDispose(p);
end;
Filipe35
Messages postés470Date d'inscriptionvendredi 14 novembre 2003StatutMembreDernière intervention23 octobre 20071 27 déc. 2004 à 18:22
merci pour cette source
Comment faire en sorte de vérifier que tout c'est bien passé ? En gros pour lire le contenu d'une editbox.
Fil
cs_hendrix
Messages postés65Date d'inscriptionlundi 30 décembre 2002StatutMembreDernière intervention18 novembre 20081 24 avril 2004 à 22:32
Merci pour ce source (c'est moi qui ai posé la question dans le forum).
Je m'empresse de tester et surtout de comprendre :-)
Et encore bravo !
SiZiOUS
Messages postés69Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 novembre 2006 21 avril 2004 à 21:24
Finalement tu l'as fait, et je vois que ton exemple est cool ;)
Note : je suis pas seul a avoir fait ce petit prog!
JROD aussi :)
17 févr. 2010 à 02:48
J'aurais une question..
donc j'ai une fenetre qui a un Tedit mais sans bouton donc j'aurais aimer savoir si je pouvais simuler la touche "entrer"
malgrer que j'ai fait des testes toujours le meme problème.
Donc si vous auriez une idée sa serais bien de la partager.
merci d'avance
24 déc. 2007 à 10:31
pour TComboBox c'est un peut différent mais ça fonctionne :
Var S : String;
begin
S := 'Item2';
SendMessage(ComboBox1.Handle, CB_SELECTSTRING, -1 , LongInt(S));
end;
Je l'ai fait en locale mais ça fonctionne aussi sur une autre application
Et si c'est une TListBox :
SendMessage(ListBox1.Handle, LB_SELECTSTRING, -1 , LongInt(S));
wParam définit à partir de quel index la recherche commence ...
-1 signifie toute la liste
19 mai 2007 à 15:10
Je cherche à prendre le contrôle d'une application, mais j'ai juste un petit problème, je prends bien le contrôle des boutons, Tedit, mais je n'arrive pas à changer le texte d'un Combobox.
C'est un Combobox qui n'a le choix qu'entre 'Plateau' et 'Chargeur de documents' (c'est pour mon scanner)
J'ai essayé d'envoyer la key 'VK_Down'.
J'ai essayé d'envoyer le texte 'Chargeur de documents': SendMessage(ComboHandle,WM_SETTEXT,0,DWord(Pchar('Chargeur de documents')))
Mon 'ComboHandle' est bon (vérifié avec un autre prog).
Mais rien ne marche, il reste sur 'Plateau'!.
J'ai besoin de votre aide.
Kacola
15 janv. 2005 à 22:08
après avoir chercher bocou !
la solution tien en 3 lettres = (nil).
je posterai ma source bientot.
Salut
14 janv. 2005 à 19:09
ce que je cherchais à faire c'est une source ki comme
son nom l'indique:
Controler une application externet par script.
Exemple:
tu fai un fichier text.txt comme suit:
Fen: Calculatrice
Bt : 5
bt : +
bt : 2
bt : entré
et tu fait LeProg.exe text.txt
et ca ferai sur la fenetre calculatrice, 5+2 entré
Filipe
PS: je chercher encore
31 déc. 2004 à 09:11
- Enumérer les fenêtres principales : fonction EnumWindows
- Choisir la bonne (nom de la fenêtre) -> handle HndlMain
- Enumérer (récursivement) les controles fenêtrés enfants : fonction HndlChild:=GetWindow(HndlMain,GW_CHILD)
- Trier les TEdit : fonction GetClassName(HndlChild,...,...)
- Trouver le bon !!!!!
ou utiliser un programme WinSight32 (fourni avec Delphi (?)) ou OpenForms et recopier la valeur du handle (qui est modifié à chaque exécution)
Pour l'aide en français, demande à Google !
Ken@vo
30 déc. 2004 à 22:47
qui parle des handle, WM_Gettext, WM_copy...etc...
En solution compliké comment fodrait il faire ?
Filipe
29 déc. 2004 à 16:05
Ton programme arrive à trouver les TEdit de simul car tu connais
leurs valeurs (.text) de départ:
H3 := HandleOfChild(MH,'TEdit','',H2); // Ici '' (3eme parametres)
Lors de la création de Simul (dans Delphi) lorsque je met par ex:
Edit1.text à 'Kenavo' au lieu de ''
L'Edit1 ne sera pas modifier ! (les autres si car toujour '' )
Comment faire pour ne plus avoir ce problème ?
Car on ne connait pas dans la plupart des cas comment à été fait le prog externe.
Une solution ? Simple de préférence.
Filipe
28 déc. 2004 à 22:32
Bonne source
Filipe
28 déc. 2004 à 08:35
function LitTEdit(EditHandle : THandle) : string;
var
p : PChar;
i : Integer;
begin
p := StrAlloc(256);
i := SendMessage(EditHandle,WM_GETTEXT,256,integer(p));
Result := String(P);
StrDispose(p);
end;
27 déc. 2004 à 18:22
Comment faire en sorte de vérifier que tout c'est bien passé ? En gros pour lire le contenu d'une editbox.
Fil
24 avril 2004 à 22:32
Je m'empresse de tester et surtout de comprendre :-)
Et encore bravo !
21 avril 2004 à 21:24
Note : je suis pas seul a avoir fait ce petit prog!
JROD aussi :)