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 6 et antérieur Discussion :

[VB]donner le focus à une application déja ouverte ou fermée


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut [VB]donner le focus à une application déja ouverte ou fermée
    Bonjour,


    voilà j'ai crée un bout de code pour démarrer un logiciel activesync ( prog de synchronisation de pocket pc), puis effectué une synchronisation.

    mais j'ai fait mon code avec la fonction shell , le problème c'est que le logiciel est déja démarrer( impossible de créer une 2 instance) , donc lorsque le code s'execute , je perds le focus et je ne peux réaliser une combinaison de touche avec sendkeys.

    je cherche comment donner le focus au logiciel Microsoft Activesync , pour pouvoir exécuter un e combinaison de touche.

    je connais le nom de la fenetre a qui je dois donner le focus : Microsoft ActiveSync.

    il y a-t-il une solution sans que ce soit une usine à gaz ? ( je suis pas non plus un pro des codes )


    merci

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    AppActivate dit dans l'aide en ligne :

    Activates an application window.

    Syntax

    AppActivate title[, wait]

    The AppActivate statement syntax has these named arguments:

    Part Description
    title Required. String expression specifying the title in the title bar of the application window you want to activate. The task ID returned by the Shell function can be used in place of title to activate an application.
    wait Optional. Boolean value specifying whether the calling application has the focus before activating another. If False (default), the specified application is immediately activated, even if the calling application does not have the focus. If True, the calling application waits until it has the focus, then activates the specified application.
    Remarks

    The AppActivate statement changes the focus to the named application or window but does not affect whether it is maximized or minimized. Focus moves from the activated application window when the user takes some action to change the focus or close the window. Use the Shell function to start an application and set the window style.
    In determining which application to activate, title is compared to the title string of each running application. If there is no exact match, any application whose title string begins with title is activated. If there is more than one instance of the application named by title, one instance is arbitrarily activated.
    c'est à Wait que tu dois t'intéresser

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    Salut !!

    ok bon je n'arrive pas bien à utlisé la propriété wait , je ne comprend pas trop comment l'utilisé , ce que je doit mettre à true ou false.

    j'ai quand même pu m'en sortir , an allant au plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AppActivate ("Microsoft ActiveSync")
     
    SendKeys "%(f)"
    SendKeys "s"
    cela fonctionne très bien , a condition que le fentre soit démarrer bien sur.

    le mieux serait que j'y ajoute un bout de code au cas ou la fenetre est fermer , pour que cela l'ouvre ... autrement dit une fonction shell j'étudie ca, et j evais tacher d'arriver à mieux comprendre la propriété wait

    merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    bon j'y est passé quelques heures mais la je sèche :

    pour quoi ce code ne marche pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim dem
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE", 1)
    AppActivate ("Microsoft ActiveSync")
     
     
    SendKeys "%(f)"
    SendKeys "s"
    cela bloque tjs sur AppActivate alors que la fenetre s'affiche bien , on dirai preque que c'est une question de temps d'execution le message d'erreur arrive avant que la fenetre du logiciel s'affiche ?

    concernant la propriété de wait de AppActive je nage ... alors je sais cette propriété peut m'aider mais je sais pas l'utilisé

    quand pensez-vous ?

    EDIT : quand je lance séparément les codes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE
    par démarrer exécuter

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AppActivate ("Microsoft ActiveSync")
     
     
    SendKeys "%(f)"
    SendKeys "s"
    [/code]

    par un bouton sur access ca fonctionne , alors question de temps d'exécution ?

  5. #5
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    A mon avis (mais c'est seulement un avis) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE", 1) 
    AppActivate ("Microsoft ActiveSync")
    lance 2 fois ton appli

    essayes plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE", 1) 
    AppActivate dem
    Mais je crois que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE", 1)
    marcherait aussi (sans le Appactivate puisqu'il s'agit d'une fonction)
    Comme je te l'ai dit sur un autre post (mais mal, probablement, car j'étais fatigué, l'utilisation de AppActivate dem n'est nécessaire que si tu veux pouvoir continuer, plus loin, à évoquer dem

    mais c'est juste une idée...


  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    essayes plutôt
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE", 1)
    AppActivate dem
    cela ne focntionne pas , les sendkeys ne marchent pas.

    Mais je crois que :
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE",
    1)

    cela marche , la fentre est démarrer mais idem les endkeys ne fonctionne pas.


    je voudrais mettre une temporisation d'une 1 seconde voir moins, mais je sais pas faire ...

  7. #7
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    une temporisation peut être réalisée facilement ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    depart = timer
    Do While Timer <depart + 1 '(pour 1 seconde . ou + 2 pour 2 sec etc...)
      DoEvents	
    Loop
    essayes si tu veux mais je ne crois pas que le problème soit là.


  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    et ben miracle ca marche !!

    merci pour la tempo entre temps j'ai trouvé le même code

    Merci bp pour toute ton aide , l'objectif est atteint.

    A la prochaine jmfmarques

  9. #9
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Ouf ! Je suis bien sûr content mais à moitié seulement car je ne m'explique pas le pourquoi de la réussite (j'aime pas çà en général).

    Mais, si tu veux être utile :

    Peux-tu essayer dans ce cas d'envoyer tes sendkeys avant l'appel du Shell ?? (juste pour voir .... j'ai comme une intuition...)

    Si tu en as le temps, fais-le et dis moi...

    Merci

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    heu oui je comprend pas trop,

    faire des sendkeys avant la commande shell , mais tjs avant Appactivate , car sinon c'est impossible .


    je vais essayer et je te tiens au courant.

  11. #11
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Enlèves carément le Appactivate
    et envoies le sendkeys avant le shell, dans cet ordre.

    Inhibes le temporisateur (car on essaye de s'en débarrasser...)

    1) 1er essaiSenkeys... (ton 1er flux)
    Sendkeys...(ton 2ème flux)
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE",
    3)

    2) ème essaiSenkeys... (ton 1er flux)
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE",
    3)
    Sendkeys...(ton 2ème flux)

    Juste pour voir...

    Merci

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    test sans AppActivate , et sans la tempo.

    ou send flux 1 : sendkeys "%F"
    et sendkey flux 2 = sendkeys "s"

    test 1 :

    le fenetre s'affiche et rien ne se passe. les sendkeys fonctionne pas


    test 2 :

    la fenetre s'affiche et rien ne se passe. les sendkeys fonctionne pas non plus.


    Par contre je confirme que grace à la tempo ca marche.

    bien j'ai un problème si je l'éxecute à la fermeture d'un fomulaire , les endkeys ne marche pas bien .. pourquoi je sais pas

    en cliquant sur un bouton , ca fonctionne en mettant l code dans form_unload ca marche pas form_close non plus..

    je m'yperd ..

    il est vraiaussi que j'aimrai bien savoir comment marche réellement ce code !!

    a plus

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    chose complétement ahurissante je suis oblige de mettre une autre tempo à la fin de du code pour que celui-ci fonctionne dans le code form_unload :

    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
    Dim dem
    dem = Shell("C:\Program Files\Microsoft ActiveSync\WCESMGR.EXE", 1)
     
    Dim PauseTime, Start
     PauseTime = 0.01
      Start = Timer
      Do While Timer < Start + PauseTime
      DoEvents
       Loop
     AppActivate ("Microsoft ActiveSync")
     
    SendKeys "%(f)"
    SendKeys "s"
     
    PauseTime = 2
      Start = Timer
      Do While Timer < Start + PauseTime
      DoEvents
       Loop
    merci a celui qui m'explique

    je comprend plus rien ..

    je testerai avec une autre version d'ActiveSync.

    pour l'instan je suis avec access 2003 vb , et Activesync3.7

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    et ce qui est dingue c'est je ne peux pas descendre en dessous de 2 seconde

    dans la dernier tempo sinon les sendkeys ne font pas toutes ...

    si je baisse à 1.5 sec le sendkeys "%f" fonctionne le menu du fichier se déroule

    mais le sendkeys "s" ne se fait pas et ca bloque ...

    une idée car la je suis fou !!!!

  15. #15
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Hé oui, Nicko !

    L'utilisation de Sendkeys n'a jamais été claire et s'avère, entre 2 applis, assez surprenante et quelquefois aléatoire.

    Je me rappelle avoir tenté (il y a longtemps) d'utiliser le sendkeys pour ouvrir, depuis une appli, l'explorateur pour y faire des opérations de copier-coller de répertoire (sans donc écrire du code) et avoir noté qu'avec les mêmes expressions (sans rien changer donc), j'obtenais des résultats toujours différents.... Je n'avais pas réussi à trouver d'explications logiques et celà m'avait énervé.

    C'est aussi la raison pour laquelle je n'utilise plus le sendkeys autrement que pour envoyer des séquences à l'intérieur même de mon appli.

    Parce-que je ne parviens pas à des explications logiques, je fais comme les chiens face au tonnerre et évite soigneusement de m'y trouver confronté. La lecture de tes onservations me conforte dans cette idée...

    Amitiés

  16. #16
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Je rappelle que la syntaxe de SendKeys, comporte une variable bolléenne

    SendKeys string[, wait]
    Fait un test avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SendKeys "%(f)" , true
    SendKeys "s" , true

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    merci,

    mais cela ne change rien. rien à faire c'est aléatoire à la fermeture d'un form

    j'ai fais un code avec une seul tempo après la commande shell et avant Appactivate

    puis les sendkeys, il fonctionne à 100% quand je l'exécute à partit d'un douton d'un form access.

    par contre je reviens sur ce que j'ai dis ; à la fermeture le même code ne fonctionne q'une 1 fois sur 15 !!

    cela bug à AppActive , ou alors ca n'ouvre que le programme , ou alors ca ouvre et ca n'excute que la première senkey le menu fichier se déroule et l'actrion est bloqué le sablier n'arrete pas de tourner !!

  18. #18
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Hé ! Hé !
    Hi ! Hi!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Donner le focus à une application externe
    Par Betize dans le forum C#
    Réponses: 3
    Dernier message: 01/07/2013, 10h33
  2. relancer une application déja ouverte
    Par fally dans le forum C#
    Réponses: 10
    Dernier message: 12/03/2008, 19h49
  3. Réponses: 3
    Dernier message: 22/08/2005, 17h15
  4. "Mettre le focus" à une application à partir de son Handle
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/07/2005, 08h54

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