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

VB.NET Discussion :

Commander une application sans utiliser les métodes sendkeys


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut Commander une application sans utiliser les métodes sendkeys
    Bonjour à tous,
    Malgré de nombreuses recherches dans les bons cours ou les forums de ce site et d'encore plus nombreux essais. Je me résous a vous demander de l'aide. J'en profite pour vous remercier par avance.
    J'ai un petit projet de créer une petite interface en vb permettant de :
    1. Récupérer le chemin complet d'un fichier sélectionné par l'utilisateur
    2. Ouvrir une petite application permettant de traiter les données du fichier sélectionné et copier les données
    3. Coller les données dans Excel et lancer une macro


    Les points N°1 et N°3 sont réalisés et fonctionne.

    Le point bloquant est le point N°2 :
    L'application est un freeware sous la forme d'un fichier .exe
    Je parviens à l’exécuter sans problèmes. Ensuite je parviens à ouvrir un fichier en utilisant les méthodes Sendkeys.send puisque l'application n'ouvre pas le fichier en utilisant la classe Process et en lui affectant un .StartInfo.FileName.
    Du coup je me retrouve avec un code bancal et pas du tout "esthétique" qui fonctionne de manière aléatoire :
    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
     
            Dim Appli As New Process()
            Process.Start(Chemin_fichier)
            Clipboard.SetDataObject(Chemin_fichier, True)
            System.Threading.Thread.Sleep(3500)
            SendKeys.Send("^(p)") 'Ctrl-p
            System.Threading.Thread.Sleep(1000)
            SendKeys.Send("^(v)") 'Ctrl-v
            System.Threading.Thread.Sleep(500)
            SendKeys.Send("~") 'Entrée
            System.Threading.Thread.Sleep(500)
            SendKeys.Send("~") 'Entrée
            My.Computer.Clipboard.Clear() 'Vide le presse papier afin de pouvoir vérifier plus tard la présence des données du .pri
            System.Threading.Thread.Sleep(500)
            SendKeys.Send("{TAB}")
            System.Threading.Thread.Sleep(500)
            SendKeys.Send("^(a)")
            System.Threading.Thread.Sleep(500)
            SendKeys.Send("^(c)") 'Ctrl-c
            Appli.Close()
    Le plus gros problème est l'envoi des données vers le presse papier avec le Ctrl C car la sélection précédente n'est pas bonne. J'ai réalisé de nombreux essais en manuel afin de chercher une méthode a appliquer dans le code. Mais la plus pertinente que j'ai trouvé est la sélection à la souris. Mais j'ai fait des recherches et les solutions me paraissait encore plus bancale que les Sendkeys.

    J'ai cherché plusieurs méthodes dans les cours vb.net mais pas de solutions.

    Merci à tous et bonne journée...
    Merci de ainsi que d'utiliser les boutons et

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,
    Citation Envoyé par r.morel Voir le message
    Ensuite je parviens à ouvrir un fichier en utilisant les méthodes Sendkeys.send puisque l'application n'ouvre pas le fichier en utilisant la classe Process et en lui affectant un .StartInfo.FileName.
    Une première étape à faire est d'essayer de passer le nom du fichier de données à l'exe. (.StartInfo.FileName c'est pour l'exe)
    le logiciel accepte-til des arguments (par exemple un nom de fichier de données) en ligne de commande ?
    Auquel cas il faut renseigner la propriété .Arguments de ProcessStartInfo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                Dim psi As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo()
                psi.FileName = "fichier exe indispensable"
                psi.Arguments = "fichier de données"
                Dim p As System.Diagnostics.Process = New System.Diagnostics.Process
                p.StartInfo = psi
                p.Start()
    Autre approche à voir
    L'application freeware peut-elle traiter des fichiers de script ?
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Bonjour rv26t,
    Merci pour votre réponse rapide.

    Je viens de tester la classe ProcessStartInfo et la propriété Arguments. Comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            Dim psi As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo()
            psi.FileName = "C:\Program Files (x86)\Timan_2_1\TimAn2.exe"
            psi.Arguments = Chemin_fichier_pri
            Dim Ti_man As System.Diagnostics.Process = New System.Diagnostics.Process
            Ti_man.StartInfo = psi
            Ti_man.Start()
    Cela ouvre l'application parfaitement. Mais n'ouvre pas le fichier.

    Autre approche à voir
    L'application freeware peut-elle traiter des fichiers de script ?
    Comment savoir si l'application accepte des fichiers de script pour exécuter un code ?

    Sincères salutations.
    Merci de ainsi que d'utiliser les boutons et

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par r.morel Voir le message
    Cela ouvre l'application parfaitement. Mais n'ouvre pas le fichier.
    Il faut peut-être un élément dans la ligne de commande qui indique qu'il s'agit d'un fichier.
    Voir la doc du logiciel pour les arguments de la ligne de commande.

    Citation Envoyé par r.morel Voir le message
    Comment savoir si l'application accepte des fichiers de script pour exécuter un code ?
    Dans la documentation du logiciel.

    On ne sais pas quelle est cette appli, ni à quoi elle sert. (quelqu'un la connaîtra peut-être)
    Les fichiers de données sont-ils lisible (en texte) ? (dans ce cas tu peux accéder directement au fichier dans VB.)
    ou avec un format propriétaire ?
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Il faut peut-être un élément dans la ligne de commande qui indique qu'il s'agit d'un fichier.
    Voir la doc du logiciel pour les arguments de la ligne de commande.
    L'aide du logiciel est vraiment sommaire. La documentation explique le fonctionnement et le but du logiciel mais ne précise pas si elle gère les scripts.

    On ne sais pas quelle est cette appli, ni à quoi elle sert. (quelqu'un la connaîtra peut-être)
    Les fichiers de données sont-ils lisible (en texte) ? (dans ce cas tu peux accéder directement au fichier dans VB.)
    ou avec un format propriétaire ?
    L'application est dispo ici : http://www.skogforsk.se/butiken/Prog...=SFSearchIndex
    Elle permet d'ouvrir un fichier qui contient du texte et est lisible avec n'importe quel éditeur de texte ou excel. Cependant elle convertie les données dans un tableau selon un index qui permet de connaitre les données et leurs type, car le fichier contient de nombreuses informations différentes.
    J'ai créé une macro sous excel qui lit l'index et retrouve les données souhaitées et créait un rapport sous forme de tableau croiser dynamique. Seulement aujourd'hui l'utilisateur doit copier les données de l'application vers excel et lancer la macro. C'est ce que j'essaie de faire via une interface vb.

    Merci encore et bonne soirée.
    Merci de ainsi que d'utiliser les boutons et

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Pour piloter une application "externe" il y a plusieurs solutions.

    Mais à part "la simulation du clavier/souris" elle ont toutes un point commun. Il faut que le créateur de cette application a mis en place ces mécanismes (que ça soit par des arguments en ligne de commande ou par l'automation par une interface).

    Si la documentation est lacunaire à ce niveau, il ne te reste plus qu'à prendre contact avec l'éditeur du logiciel pour lui poser la question. Voir lui demander si c'est possible de mettre à jour son application avec ces fonctionnalités.

    En cas de réponse négative, il ne te reste plus qu'à trouver une solution de contournement comme la simulation clavier/souris ou une invite à l'utilisateur d'exécuter lui même l'opération (un peu comme c'est le cas actuellement).

  7. #7
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Citation Envoyé par sinople Voir le message
    Pour piloter une application "externe" il y a plusieurs solutions.

    Mais à part "la simulation du clavier/souris" elle ont toutes un point commun. Il faut que le créateur de cette application a mis en place ces mécanismes (que ça soit par des arguments en ligne de commande ou par l'automation par une interface).

    Si la documentation est lacunaire à ce niveau, il ne te reste plus qu'à prendre contact avec l'éditeur du logiciel pour lui poser la question. Voir lui demander si c'est possible de mettre à jour son application avec ces fonctionnalités.

    En cas de réponse négative, il ne te reste plus qu'à trouver une solution de contournement comme la simulation clavier/souris ou une invite à l'utilisateur d'exécuter lui même l'opération (un peu comme c'est le cas actuellement).
    Bonjour Sinople,
    merci pour cette réponse.
    Je vais voir ce que je peux faire. Je vais me pencher plus sérieusement sur le traitement des données du fichier sous forme de texte. Afin d'estimer si je peux, plus ou moins facilement, extraire les données dont j'ai besoin.
    Sinon je verrais pour contacter le développeur mais je ne fais pas trop de doute sur le fait qu'il réponde à mes demandes.

    En tous cas. Merci de votre aide. Cela m'a bien aidé.
    Bonne journée
    Merci de ainsi que d'utiliser les boutons et

Discussions similaires

  1. utiliser une transaction sans vérouiller les tables
    Par brruno dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/09/2014, 17h58
  2. Utilisation d'une application sans installer fireBird
    Par tarek_ep dans le forum Débuter
    Réponses: 2
    Dernier message: 22/12/2008, 11h23
  3. Réponses: 4
    Dernier message: 28/05/2008, 16h35
  4. Pause dans une application sans utiliser Sleep()
    Par CriPpLe dans le forum MFC
    Réponses: 9
    Dernier message: 25/03/2006, 11h00
  5. Réponses: 1
    Dernier message: 29/12/2005, 13h25

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