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 :

Quelle paramètre à passer pour un shellExecute ?


Sujet :

VBA Access

  1. #1
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut Quelle paramètre à passer pour un shellExecute ?
    Bonjour,

    Dans mon appli Access, j'ai un formulaire permettant de visualiser une image. J'ai aussi une commande permettant de la modifier.
    Cependant, l'accès à la modification n'est pas intuitif.

    Je m'explique :
    Le bouton que j'utilise déclenche un événement "sur clic" qui est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Call RunShellExecute("Open", strFiles, 0&, 0&, SW_SHOWNORMAL)
    RunShellExecute étant une procédure qui utilise en faite l'API ShellExecute déclarée de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Le problème est donc le suivant :
    Ma commande utilise le paramètre "Open", qui est le paramètre par défaut que l'on peut trouver dans l'explorateur windows. En l'occurence, chez moi, si mon fichier possède l'extention .jpg (pour un fichier image), il ouvre la visionneuse de photo windows.
    Pour modifier la photo, il faut ensuite que j'aille dans le menu de la visionneuse et cliquer sur ""Ouvrir - Microsoft Office Picture Manager". Une opération supplémentaire inutile donc, dont je souhaiterais m'affranchir"

    Ce que je souhaiterais faire, c'est ouvrir directement Microsoft Office Picture Manager en effectuant l'équivalent de la commande "Ouvrir avec - Microsoft Office Picture Manager".

    Lorsque j'étais sous Windows XP, il y avait une option dans l'explorateur permetant de parcourir les propriétés associés aux extentions de fichiers, avec les commandes associés. Cette option a malheureusement disparue dans Windows 7; et le menu dans le panneau de configuration "programme par défaut -définir les association", est loin d'offrir les mêmes fonctionnalités.

    Comme je ne suis pas un pro de la base de registre, je souhaiterais savoir si l'un d'entre vous connaitrait la commande à associer.

    En vous remerciant par avance pour vos réponses éclairées
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    ShellExecute exploite l'association "type de fichier" <--> "application" en fonction d'un verbe (open, edit, print, ...)

    S'il n'existe aucun verbe associant Microsoft Office Picture Manager à un fichier image, on ne pas utiliser ShellExecute.

    Je me dirigerai vers le lancement de l'application Microsoft Office Picture Manager par ligne de commande.
    Exemple, partant du principe que l'exécutable est dans le même dossier qu'Access :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TestOfficePicMngr()
    Dim sCmd As String, sPicFile As String
    ' Le fichier image à ouvrir
    sPicFile = "E:\Mes Documents\Mes images\GOLD.JPG"
    ' Construction de la ligne de commande
    sCmd = """" & Application.SysCmd(acSysCmdAccessDir) & "OIS.EXE" & """ " & _
           """" & "E:\Mes Documents\Mes images\GOLD.JPG" & """"
    ' Exécution de la ligne de commande
    Shell sCmd
    End Sub
    A+

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,
    tu peux également lancer l'application Microsoft Office Picture Manager ou toute autre de ton choix via ShelleExecute.

    Le seul prérequis est de connaître le FullName de l'exécutable à lancer.

    Un exemple avec Irfanview ici

    Si tu fonctionnes avec une application tierce, tu peux tester son existence (car chemin d'install standard), l'installer si pas présente et l'appeler facilement vu que tu connais sa localisation.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  4. #4
    Membre expérimenté Avatar de RobiPMS
    Homme Profil pro
    Conseiller psycho-pédagogique
    Inscrit en
    Octobre 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseiller psycho-pédagogique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 827
    Points : 1 506
    Points
    1 506
    Par défaut
    Bonjour.
    Pour répondre à ta demande concernant la façon, sous W7, d'associer un programme à un fichier, il suffit d'utiliser le clic droit sur un fichier du type dont tu veux modifier l'association, et dans le menu contextuel, tu cliques sur la dernière proposition : Choisir le programme par défaut. Là, tu désignes le programme à utiliser en vérifiant que la case "toujours utiliser le programme sélectionné ....etc" est bien cochée.
    Cordialement.
    N'oubliez pas de tagguer la discussion comme résolue si vous avez été aidé!
    Plus haut monte le singe, plus il montre son cul (Montaigne)
    Je ne réponds pas aux messages personnels concernant des questions discutées dans le forum.

  5. #5
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut dumas.blr, LedZeppII , Godzestla et RobiPMS

    pour en rajouter une couche :
    il est normalement toujours possible d'ajouter par une interface graphique les verbes mais je t'avoue qu'à chaque version l'appli change souvent d'emplacement...
    donc via la base de registre:
    (vu qu'un .reg demande un hex(2) pour le chemin) je propose une exécution en ligne de commande (cmd.exe en tant qu'administrateur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REG ADD HKEY_CLASSES_ROOT\jpegfile\shell\edit2\command  /T REG_SZ /D "C:\Program Files\GIMP-2.0\bin\gimp-2.6.exe %1"
    j'ai pas le chemin pour MS Picture Manager mais tu le mettra à la place de celui de GIMP ci dessus en conservant %1.
    tu auras ainsi un second verbe "edit2" pour les fichiers .jpg (en supposant qu'il soit bien aussi associé à jpegfile ) que tu pourras alors utiliser avec le RunShellExecute.


  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut Vodiem,
    comme d'hab je suppose que ce que tu suggères est du béton.

    Mais , ma foi, je n'ai ... rien compris à ta solution.
    Je la relirai après une nuit de sommeil.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  7. #7
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Salut à tous et merci pour vos réponses éclairées.

    La solution de LedZepII me parait la plus simple à mettre en oeuvre, et la plus sensée (pourquoi faire simple quand on peu faire compliqué )

    Je retiens la suggestion de Vodiem, mais elle implique que lorsqu'on fait un déploiement multi-poste, il faut exécuter la commande de MAJ de la base de registre sur chacun des postes déployés ...
    Ma question se portera alors sur ceci : est-ce uniquement dans HKEY_CLASSES_ROOT que l'on trouvera les extensions du menu contextuelde l'explorateur ? En tout cas, je m'en vai de ce pas vérifier la base de registre à cette entrée

    Encore merci pour votre aide
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  8. #8
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    merci Godzestla

    pour vous éclairez sur le fonctionnement et pour faire simple:
    HKEY_CLASSES_ROOT contient les extensions de fichier dont .jpg
    dans ces clefs qui lie les extensions à leurs applications il semblerait logique de définir là les associations mais parce qu'un format recouvre plusieurs extensions: .jpg .jpeg .jpe ... on trouve dans la valeur "par défaut" la référence à la clef qui les définissent tous soit dans ce cas : jpegfile.
    donc en allant à jpegfile ont y trouvera là la clef "shell" qui correspond en gros aux verbes (une partie du menu clic droit sur un fichier)
    il suffit de créer à l'intérieur une clef pour un verbe (n'importe quel nom) et d'y mettre dans "par défaut" le texte que l'on veut faire apparaitre dans le menu contextuel.
    pour lui associer une application il faut créer à l'intérieur de la clef verbe une clef nommé expressément: "command" qui contient la ligne de commande à exécuter: soit le chemin de l'application. en ligne de commande on transmets les paramètres par des variables d'environnements spécifié par %1, %2... %1 dans ce cas représente le nom du fichier donc sans lui l'application s'ouvre mais sans le fichier (c'est une convention que l'application récupère le nom du fichier dans la ligne de commande mais toutefois pas une obligation)

    donc dumas.blr oui c'est bien là qu'on trouve le mécanisme pour tous les systèmes windows qui utilisent la base de registre.

    tu as effectivement la possibilité d'exécuter avec Shell (solus LedZeppII ) ou ShellExecute mais chacun à ses particularités en dehors du fait qu'il ne revoit pas les mêmes types d'information la principale différence que j'y vois c'est que ShellExecute s'affranchit de l'application puisqu'il va le retrouver via l'extension et verbe.
    ca a des avantages et inconvénient:
    avec un shell tu obliges d'avoir l'appli et de spécifier son emplacement dans ton appli (au déploiement tu auras aussi ce soucis). mais tu peux verrouiller sur une appli.
    avec un shellExecute tu laisse libre arbitre à l'utilisateur de choisir ce qui lui convient via le système d'exploitation. bien entendu ton appli doit être en corrélation avec les verbes existants. (même prb au déploiement mais au niveau base de registre) dans ce cas il est plus facilement envisageable de mettre en place un éditeur différent pour chaque utilisateur.
    ...

    enfin shell ou shellexecute... ca reste du kifkif bourricot pour tes utilisateurs...
    prend ce qui te parait le plus simple au pire tu sauras comment le changer.

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

Discussions similaires

  1. Paramétre à passer pour une méthode
    Par Lordy92 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 21/03/2011, 15h06
  2. Réponses: 8
    Dernier message: 01/11/2010, 14h01
  3. Quelle Certification passer pour Silverlight
    Par talu3000 dans le forum Silverlight
    Réponses: 14
    Dernier message: 23/08/2010, 08h36
  4. Réponses: 6
    Dernier message: 07/07/2007, 16h51
  5. Quelle licence choisir pour cette application ?
    Par krusaf dans le forum Licences
    Réponses: 6
    Dernier message: 08/07/2004, 20h20

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