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

VBA Access Discussion :

Réactiver une fenêtre lancée avec shell


Sujet :

VBA Access

  1. #1
    Membre averti
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Points : 403
    Points
    403
    Par défaut Réactiver une fenêtre lancée avec shell
    Bonjour à tous,

    J'essaye mais sans succès d'adapter le code de la Faq afin de réactiver une appli (PhotoFiltre) lancée avec shell comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nAppPid = Shell(sAppName & " """ & Me.txtChemin & """", 1)
    .

    Du code de la Faq j'adapte la commande (passage du PID en parametre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub test_Click()
    subShowAnyApplication "PhotoFiltre", "C:\Program Files\PhotoFiltre\PhotoFiltre.exe", False, nAppPid
    End Sub
    ainsi que le module subShowAnyApplication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub subShowAnyApplication(ByVal ApplicationName As String, _
      ByVal ApplicationPath As String, ByVal IsVisible As Boolean, ByVal lngAppPID As Long)
    ''' ******************************
    ''' Lance l'instance de l'application et la réaffiche si nécessaire
    ''' ******************************
    Dim lngWindowHandle As Long
           DoEvents
                lngWindowHandle = fnctGetWindowHandle(lngAppPID)
            If fnctBringWindowsToTop(lngWindowHandle) Then
            Else
              MsgBox "L'instance de la fenêtre de l'application " & ApplicationName & _
        " à réafficher n'a pas été trouvé !", vbExclamation, "Fin"
            End If
        End Sub
    J'ai supprimé la tempo et utilise le PID passé en paramètre.
    Le Module basApiDeclaration est conservé tel quel.

    Ce que je souhaite: j'ouvre une image dans PhotoFiltre à partir du formulaire pour y appliquer un traitement par séquence de touches puis par l'opérateur. Ensuite l'opérateur réactive la fenêtre du formulaire et un bouton "continuer" doit réactiver PhotoFiltre pour appliquer à nouveau une séquence de touche.

    Le problème: PhotoFiltre s'affiche parfois sans que j'arrive à saisir si il y a une circonstance particulière.
    Par contre, si, avant de lancer la commande d'activation je clique PhotoFiltre dans la barre des taches et reviens sur Access (bien obligé pour lancer ma commande...) ça fonctionne toujours.

    Ces petits "détails" pour économiser quelques centaines de milliers de cliques dans les 6 mois à venir .

    Merci de votre attention.
    Un seul conseil: la règle des 3S.

  2. #2
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonjour,

    As-tu vérifié que c'est bien le bon PID pendant l'execution grace au Task manager ? Il faut savoir une petite chose concernant le shell c'est que tout ce qui s'execute à partir de celui-ci est fait dans un autre processus qu'access et access n'as aucune visibilité sur ce processus, c'est a dire qu'il est entièrement autonome. Ce que je redoute c'est que windows XP donne à ce processus un nouveau numéro après son execution ou que le shell ne retourne que l'ID du processus svchost et pas celui réellement de l'application.

    Néanmoins je trouve assez étrange de devoir faire ça dans une application access, il faudrait se pencher un peu plus sur la conception sur ce point précis.
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

Discussions similaires

  1. comment fermer une fenêtre modale avec le code
    Par Sheriff dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 16/10/2006, 16h36
  2. Récupérer le hwnd d'une fenetre lancé avec shellexecute sans les API?
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 06/09/2006, 19h48
  3. Comment fermer une fenêtre dynamique avec onclose
    Par nopnop dans le forum Delphi
    Réponses: 23
    Dernier message: 18/07/2006, 18h08
  4. Réponses: 43
    Dernier message: 03/03/2006, 19h41
  5. Centrer une fenêtre ouverte avec window.open et statusbar
    Par Michaël dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/01/2006, 13h07

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