IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Remplir les champs d'une application tierce via du code c#


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Remplir les champs d'une application tierce via du code c#
    Je dispose d'une application tierce qui dispose de champs à remplir, et j'aimerai pouvoir les remplir via le code C# et appuyer sur un bouton une fois les champs remplis, il n'y a rien d'autre à réaliser.

    Je ne dispose hélas d'aucune source du programme en question.

    J'ai regardé du coté de l'API Windows mais je ne trouve pas d'information autour de la manipulation des champs d'une autre application.

    Merci d'avance pour toute information utile à ce sujet.

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Tu peux regarder du côté de la librairie White.

    Sinon, du côté de l'API Windows, tu peux utiliser FindWindow (pour trouver la fenêtre de l'autre application), ainsi que FindWindowEx (pour trouver des controls au sein de la fenêtre que tu as sélectionné.

    Quelques exemples :
    - http://www.devasp.net/net/articles/display/690.html
    - http://www.dotnetspider.com/resource...indow-API.aspx
    - http://msdn.microsoft.com/en-us/library/ms171548.aspx
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Citation Envoyé par Matt07 Voir le message
    Sinon, du côté de l'API Windows, tu peux utiliser FindWindow (pour trouver la fenêtre de l'autre application), ainsi que FindWindowEx (pour trouver des controls au sein de la fenêtre que tu as sélectionné.
    Il va te falloir quelques outils pour espionner afin de connaitre les information telles que le nom des classes...
    Pour cela, tu as WinInspector et Spy++
    Courage

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par FrameBreak Voir le message
    Il va te falloir quelques outils pour espionner afin de connaitre les information telles que le nom des classes...
    Pour cela, tu as WinInspector et Spy++
    Exact, merci de m'avoir complété !
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Mon premier réflexe serait d'essayer

    Parfois, il existe une interface ligne de commande qui te permet d'arriver au même résultat que l'interface graphique...

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ces infos, je vais m'atteler à tester vos propositions

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai réussi le pilotage avec la classe SendKeys sous XP sans problème, par contre sous Seven, ça ne marche pas, et je ne trouve pas pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    IntPtr hwnd = IntPtr.Zero;
                hwnd = (IntPtr)FindWindow(null, "SFP+ 8.5.vi");
                SetForegroundWindow(hwnd);
                SendKeys.SendWait("{Tab}");     //Tab 1 SN
                SendKeys.SendWait("{Tab}");     //Tab 2 SFP+
                SendKeys.SendWait("{Tab}");     //Tab 3 SN
                SendKeys.SendWait(sn);
                SendKeys.SendWait("{Tab}");     //Tab 4 VN  
                SendKeys.SendWait(vendorName);
                SendKeys.SendWait("{Tab}");     //Tab 5 PN
                SendKeys.SendWait(partNumber);
                SendKeys.SendWait("{Tab}");     //Tab 6 Input File
                SendKeys.SendWait(inputFile);
                SendKeys.SendWait("{Tab}");     //Tab 7 DATA CODE
                SendKeys.SendWait(datecode);
                SendKeys.SendWait("{Tab}");     //Tab 8 WRITE
                SendKeys.SendWait("{Tab}");     //Tab 9 WaveLength
                SendKeys.SendWait(wavelength);
                SendKeys.SendWait("{Tab}");     //Tab 10 SFP+
                SendKeys.SendWait("{Tab}");     //Tab 11 SN
                SendKeys.SendWait("{Tab}");     //Tab 12 VN
                SendKeys.SendWait("{Tab}");     //Tab 13 PN
                SendKeys.SendWait("{Tab}");     //Tab 14 Input File
                SendKeys.SendWait("{Tab}");     //Tab 15 DATA CODE
                SendKeys.SendWait("{Tab}");     //Tab 16 WRITE
                SendKeys.SendWait("{Enter}");   //Enter button
    La fenêtre est correctement mis au premier plan, mais rien ne se passe, que ça soit sous Win 7 ou Win 8, ça ne marche pas, par contre sous un XP, ça n'a pas posé de problème.

    Est ce que quelqu'un à une idée d'où pourrait venir le problème?

  8. #8
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Citation Envoyé par feyinlin Voir le message
    Est ce que quelqu'un à une idée d'où pourrait venir le problème?
    Peut être l'UAC ?

    http://msdn.microsoft.com/en-us/libr....sendkeys.aspx
    The SendKeys class has been updated for the .NET Framework 3.0 to enable its use in applications that run on Windows Vista. The enhanced security of Windows Vista (known as User Account Control or UAC) prevents the previous implementation from working as expected.

    The SendKeys class is susceptible to timing issues, which some developers have had to work around. The updated implementation is still susceptible to timing issues, but is slightly faster and may require changes to the workarounds. The SendKeys class tries to use the previous implementation first, and if that fails, uses the new implementation. As a result, the SendKeys class may behave differently on different operating systems. Additionally, when the SendKeys class uses the new implementation, the SendWait method will not wait for messages to be processed when they are sent to another process.

    If your application relies on consistent behavior regardless of the operating system, you can force the SendKeys class to use the new implementation by adding the following application setting to your app.config file.

    <appSettings>
    <add key="SendKeys" value="SendInput"/>
    </appSettings>
    To force the SendKeys class to use the previous implementation, use the value "JournalHook" instead.
    Il semblerait que le projet inputsimulator n'ait pas de problème (Je ne l'ai pas testé).

Discussions similaires

  1. [C#] Utilisation d'un WebBrowser pour remplir les champs d'une page
    Par nicosaliagos dans le forum Windows Forms
    Réponses: 10
    Dernier message: 29/05/2010, 12h25
  2. Réponses: 2
    Dernier message: 23/09/2009, 15h40
  3. Réponses: 8
    Dernier message: 29/06/2006, 15h37
  4. Comment remplir les champs d'une autre application ?
    Par rico32fr dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/06/2006, 08h54
  5. Probleme de requete pour remplir les champs d'une table
    Par Jim_Nastiq dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/04/2006, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo