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

Windows 7 Discussion :

Ajouter une entrée au menu contextuel de l'explorateur windows sans demarrer le logiciel au demarrage de win


Sujet :

Windows 7

  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut Ajouter une entrée au menu contextuel de l'explorateur windows sans demarrer le logiciel au demarrage de win
    Bonjour,
    j'ai ajouté une entrée au menu contextuel de l'explorateur de fichiers windows par mon setup fait avec inno setup.cette entrée permet si on a selectionné un ou des fichiers dans l'explorateur de fichiers de les envoyer en parametres de mon logiciel en selectionnant cette entrée dans le menu contextuel.
    dans HKLM (local machine), la clé est "SOFTWARE\Classes\*\shell\fait avec monsoft\command" et la valeur est "monsoft.exe %1".
    le probleme est que à cause de cette entrée dans la base de registre, monsoft est executé à chaque demarrage de windows ce que je voudrais eviter.
    il ya t'il un autre moyen de rajouter ce type d'entrée dans le menu contextuel de l'explorateur windows pour faire la meme chose,sans que le logiciel monsoft.exe soit executé au demarrage de windows. (j'utilise inno setup pour mon setup et il permet de mettre des entrees dans la base de registre et d'executer des commandes).
    merci.

  2. #2
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 013
    Points
    2 013
    Par défaut
    Bonjour

    Je trouve cette question sans réponse alors que j'ai moi même une question, normalement je dois apporter un élément de réponse (un truc qui fonctionne mais qui ne lance pas l'appli au démarrage de windows)

    Perso je créer une règle ainsi en exécutant un fichier.reg (mais c'est pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [HKEY_CLASSES_ROOT\*\shell\Ouvrir avec MonTruc]
    
    [HKEY_CLASSES_ROOT\*\shell\Ouvrir avec MonTruc\Command]
    @="C:\\MonTruc.exe %1"
    ça ça ajoute "Ouvrir avec MonTruc" au clic droit sur un fichier et ca le passe en paramètre à l'appli.
    rien ne se lance au démarrage de windows

    par contre moi ce qui me manque c'est :
    -que le chemin passé à l'application soit mis entre "" pour ne pas avoir d'erreur s'il y a un espace dans le nom du fichier ou son chemin
    -que je puisse sélectionner plusieurs fichier et les passer tous en même temps dans la même instance de MonTruc, là ça me lance X fois le shell et ça m'ouvre X fois Montruc :-(
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour j'ai essayé de mettre @ ou "@" comme vous et quand je clique droit j'ai un message d'erreur du genre le fichier n'est pas associé à un programme.
    moi en fait je mets un: ""="myapp.exe %1" donc "" a la place de @, et ca marche bien mais ca redemarre le soft au demarrage de windows meme en mettant dans HKCR comme vous.
    par contre moi ca marche pour une selection de plusieurs fichiers mais il faudrait que je debugge pour savoir si le programme est appele plusieurs fois avec un parametre ou une seule fois avec plusieurs, car ca revient au meme, vu comment mon logiciel est fait(c'est un logiciel fait en C++ avec Qt qui utilise la classe additionnelle SingleApplication)

  4. #4
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour,
    on m'a donné une idée sur le forum us de microsoft et je vais peut etre explorer cette solution: faire une dll d'extension shell pour ajouter l'entrée dans le menu contextuel,en fait c'est une dll COM. cela permettrait d'eviter que le logiciel se lance au demarrage comme quand on mets l'entrée dans la base de registre.
    apres c'est quand meme un peu comique de faire une dll COM avec visual studio de microsoft pour le setup d'un logiciel Qt fait avec mingw :-)
    je reviens ici, quand cela sera fait et fonctionnera.....

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 013
    Points
    2 013
    Par défaut
    Bonjour

    Moi j code en c# ;NET avec Visual studio... et je n'ai toujours pas trouvé solution à mes 2 soucis (espace dans le chemin et ouverture de plusieurs fichiers)
    C'est quoi ce truc que l'on peut faire avec visual Studio ?

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  6. #6
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour,
    c'est une dll d'extension shell et en fait c'est un objet COM.
    je ne sais pas si on peut faire celà en c#. regarde la doc de microsoft en ligne ou pose la question ici ou sur le forum msdn.
    moi en c++ ca se fait avec la librairie ATL, un objet COM. en c# ca se fait peut etre aussi?

  7. #7
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 013
    Points
    2 013
    Par défaut
    Merci je vais creuser dans ce sens
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  8. #8
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour au fait pour ton probleme d'espace dans le chemin de l'executable tu as essayé avec des guillemets autour du chemin ? ("). car en ligne de commande windows tu dois mettre des guillemets autour du chemin quand tu as des espaces dedans.
    de plus si il ya des gens qui ont fait une classe en C# comme singleapplication(classe extra C++ de Qt) qui permettent de ne lancer qu une instance d'une application et d'envoyer les parametres comme messages a l'application quand elle existe deja, tu n'aurais donc pas besoin de faire une dll d'extension shell.....
    moi je vais essayer la dll d'extension car mon probleme est que l'entree dans la base de registre demarre le programme au demarrage, ce que je veux eviter.

  9. #9
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 013
    Points
    2 013
    Par défaut
    re

    Je me souviens avoir essayé les " dans le chemin mais je vais réessayé, relu ici ça paraitrait tellement logique...
    Pour le single application dans mon ça je tiens à garder la possibilité d'ouvrir plusieurs cessions de l'application pour travailler sur 2 projets en même temps. Idéalement quand je fais clic droit ouvrir avec Montruc tous les fichiers selectionnés devrait pouvoir s'ouvrir dans la même appli, au choix celle déjà ouvert ou une autre cession. Mais là j'en demande surement beaucoup
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  10. #10
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour,

    pour .net et le c# tu as :http://www.codeproject.com/Articles/...-with-NET-Lang (pour ecrire une dll shell d'extension)

    moi j'ai fait une dll d'extension avec c++ et ATL en me basant sur le code de winmerge mais pour le moment ca ne fonctionne pas....

  11. #11
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    bonjour
    ma dll d'extension fonctionne un peu mieux maintenant,j'ai une entrée dans mon menu contextuel mais ca ne demarre pas encore mon logiciel....il doit y avoir un probleme avec la methode InvokeCommand....

  12. #12
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour,
    ma dll d'extension fonctionne maintenant (en ayant rajouté le clsid de l'objet COM et son nom dans HKCR, *\shellex\contextmenuhandlers) mais le problème est que ca demarre toujours mon logiciel au demarrage de windows....

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 689
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 689
    Points : 13 118
    Points
    13 118
    Par défaut
    L'application ne devrait pas démarrer. Contrôle qu'il n'y a pas une entrée Run dans la base des registres (HKLM et HKCU) ou les répertoires de démarrage (shell:startup et shell:common startup).

    Pour les espaces, c'est dans la base des registres qu'il faut mettre les guillemets : MonApp.exe "%1". Dans Inno Setup, les guillemets doivent être doublés : ValueData: ""{app}\MonApp.exe" ""%1""";.

    Pour charger plusieurs fichiers (fichiers ou données peu importe) dans une même fenêtre de base, deux possibilités :
    • travailler sur une instance unique. La deuxième détecte que le programme est déjà lancé (mutex) et le notifie de la nouvelle ouverture (ex. par message WM_COPYDATA) avant de se terminer ;
    • travailler sur plusieurs instances. La première se comporte comme application principale et les suivantes comme enfants de celle-ci. La fenêtre de la première instance (ou plus précisément un composant de celle-ci, ex. un onglet) devient le parent de la nouvelle fenêtre (un simple SetParent). C'est le principe adopté par Chrome.


    Dans le premier cas, le codage est simplifié. Par contre si un problème survient, c'est l'ensemble de l'application qui est en défaut. De plus, même si on sépare ses onglets en fenêtres indépendantes, c'est toujours l'application entière qui sera activée et toutes les fenêtres seront au premier plan.
    Le deuxième est plus compliqué. Il faut retrouver le composant "parent" d'un côté et mettre en route une gestion des applications "enfants" dans le programme principal (principalement surveiller l'arrêt des processus). Les ressources consommées sont également plus importantes puisqu'il y a N instances. Par contre, un problème dans un "enfant" n'altère pas les autres puisqu'ils tournent dans des processus indépendants.

  14. #14
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour et merci,
    en fait j'ai résolu mon problème tout à l'heure et je n'avais pas besoin de faire une dll d'extension :-)
    c'est tout simplement parce que je rajoutais un icone lié à l'executable dans {commonstartup...} dans mon script de setup inno...
    voila...

  15. #15
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour,
    en fait j'ai quand meme un probleme avec l'encodage avec mon entrée dans le menu contextuel,avec l'entrée dans la base de registre.
    quand je selectionne un fichier ayant des accents dans son nom (ou dans un repertoire avec des accents ) cela ne fonctionne pas correctement.
    je n'ai pas encore essayé avec la ddl d'extension pour voir si cela corrige le probleme ,mais je vais le faire.

    je me demande quel est l'encodage de l'explorateur de fichiers dans un windows 7 francais.

    dans mon programme cible qui est un programme Qt,j'ai essayé QString::fromUtf8(argv[l]) (argv[l] etant l'argument du programme donc le fichier selectionne) et QString::fromLocal8Bit et QString::fromLatin1.seul QString::fromUtf8 fonctionne sans planter le programme sur des caracteres accentues, mais le resultat n'est alors pas correct dans mon programme.

  16. #16
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 689
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 689
    Points : 13 118
    Points
    13 118
    Par défaut
    Windows est Unicode.

  17. #17
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    merci,
    mais utf8 comme linux et unix ? ou utf16 ?

  18. #18
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 689
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 689
    Points : 13 118
    Points
    13 118
    Par défaut
    Unicode, c'est du WideString. Après, sous Qt je ne sais pas.

  19. #19
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Avec Qt, les arguments de l'application sont transmis à l'objet application sous forme de char * (argc, argv) comme avec un programme sous unix.est ce de là que vient le probleme ?

  20. #20
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    voici le main.cpp d'un programme Qt et de ce programme (ici avec Singleapplication)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main(int argc, char *argv[])
    {
    
        
        SingleApplication app(argc, argv,"mysoftware");
    Singleapplication derive de QApplication(int &argc, char *argv[]), classe standard de Qt.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Inno Setup] Ajouter une entrée au menu contextuel
    Par Melow57 dans le forum Outils
    Réponses: 0
    Dernier message: 13/08/2015, 21h10
  2. [OS] Ajouter des entrées au menu contextuel
    Par Ghorbaz dans le forum Mac OS X
    Réponses: 9
    Dernier message: 22/09/2011, 17h15
  3. Réponses: 41
    Dernier message: 11/12/2009, 11h24
  4. Réponses: 1
    Dernier message: 02/08/2007, 12h42
  5. [Plugin] Ajouter une option au menu contextuel ?
    Par relivio dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 22/03/2004, 16h18

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