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

Delphi Discussion :

[Delphi7] Détecter si l'application est lancée depuis son raccourci ou de son dossier


Sujet :

Delphi

  1. #1
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut [Delphi7] Détecter si l'application est lancée depuis son raccourci ou de son dossier
    Bonsoir a tous ,
    Après l'installation de mon application (programme d'installation créer avec Inno Setup) ,
    j'ai créer un raccourci de l'application sur le bureau .
    tous fonctionne très bien, sauf un de mes clients a supprimer le raccourci est a copier l’exécutable de mon application directement sur le bureau,
    lors de lancement de mon logiciel ce dernier cherche les fichier qui se trouve dans le dossier d’installation (qui sont nécessaire pour le fonctionnement de l'application) , mais il ne trouve rien .
    ce je cherche c'est de détecte si l'application est lancée depuis son raccourci ou de son dossier d'installation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    si raccourci  alors 
       lancer l''application
    sinon
      message(l''application doit être exécuté partir de son raccourci ).
    y a il une idée svp ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Citation Envoyé par aimer_Delphi Voir le message
    ce je cherche c'est de détecte si l'application est lancée depuis son raccourci ou de son dossier d'installation.
    Ce sera ni l'un ni l'autre s'il a copier l'exe sur le bureau

    Tu pourrais comparer ExtractFilePath(Application.ExeName) avec l'entrée dans la BdR créée par Inno Setup : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{....}_is1 -> InstallLocation.

  3. #3
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Bonjour et Merci pour la réponse .
    SVP , existe il une autre solution sans passer par les paramètres Inno Setup ?

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par aimer_Delphi Voir le message
    Bonjour et Merci pour la réponse .
    SVP , existe il une autre solution sans passer par les paramètres Inno Setup ?
    à ma connaissance il n'est pas possible de savoir si l'application a été lancée depuis un raccourci ou non.

    la seule solution est de regarder Application.ExeName qui donne l'emplacement du programme.

    nb: dans l'installation il est possible d'ajouter un paramètre au lancement de l'application qui permettrait de plus ou moins détecter la chose

    si le raccourci lance "project.exe /shortcut"

    il suffit alors de tester ParamStr(1) = '/shortcut'

    mais ça ne garanti pas l'origine du lancement, mais simplement qu'il existe un paramètre.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    pourquoi ne pas tester l'existence d'un fichier (bidon mais obligatoire) dans le répertoire en cours ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if FileExists(ExtractFilePath(Paramstr(0))+'toto.txt') 
               then showmessage('OK') else  showmessage('pas bon');
    J'ai testé ça rapidement sur une appli, ça à l'air de fonctionner : si raccourci ok si programme sur desktop pas ok
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    pourquoi ne pas tester l'existence d'un fichier (bidon mais obligatoire) dans le répertoire en cours ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if FileExists(ExtractFilePath(Paramstr(0))+'toto.txt') 
               then showmessage('OK') else  showmessage('pas bon');
    J'ai testé ça rapidement sur une appli, ça à l'air de fonctionner : si raccourci ok si programme sur desktop pas ok
    Merci Sergio pour la réponse , c'est vraiment une solution pratique.

  7. #7
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    à ma connaissance il n'est pas possible de savoir si l'application a été lancée depuis un raccourci ou non.

    la seule solution est de regarder Application.ExeName qui donne l'emplacement du programme.

    nb: dans l'installation il est possible d'ajouter un paramètre au lancement de l'application qui permettrait de plus ou moins détecter la chose

    si le raccourci lance "project.exe /shortcut"

    il suffit alors de tester ParamStr(1) = '/shortcut'

    mais ça ne garanti pas l'origine du lancement, mais simplement qu'il existe un paramètre.
    merci Paul pour le suivie.
    je vais tester ta solution.

  8. #8
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    un autre solution dont j'ai trouvé (inspirée de l'idée de Sergio) c'est de chercher le Mot Desktop dans le chemin de mon exécutable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if Pos('Desktop', ExtractFilePath(Paramstr(0))) = 0 then // ce n'est pas un raccourci
         ShowMessage('ce n''est pas un raccourci')
      else
        ShowMessage('Haha c''est un raccourci');

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par aimer_Delphi Voir le message
    un autre solution dont j'ai trouvé (inspirée de l'idée de Sergio) c'est de chercher le Mot Desktop dans le chemin de mon exécutable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if Pos('Desktop', ExtractFilePath(Paramstr(0))) = 0 then // ce n'est pas un raccourci
         ShowMessage('ce n''est pas un raccourci')
      else
        ShowMessage('Haha c''est un raccourci');
    ça n'indique pas que l'executable n'a pas été déplacé, mais qu'il se trouve dans un sous répertoire de "Desktop".
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Une autre solution que j'ai trouvé , peut être ça va être utile a autre .

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    // https://stackoverflow.com/questions/36267584/delphi-where-is-the-shortcut-that-started-the-application
     
    program GetShortCutTest;
     
    {$APPTYPE CONSOLE}
     
    uses
      Windows;
     
    const
      STARTF_TITLEISLINKNAME = $800;
     
    function GetShortcutName(out LinkName: string): Boolean;
    var
      si: TStartupInfo;
    begin
      Result := False;
      FillChar(si, SizeOf(TStartupInfo), 0);
      GetStartupInfo(si);
      if (si.dwFlags and STARTF_TITLEISLINKNAME) <> 0 then
      begin
        Result := True;
        LinkName := PChar(si.lpTitle);
      end;
    end;
     
    var
      sLink: string;
     
    begin
      if GetShortcutName(sLink) then
        WriteLn('Shortcut: ' + sLink)
      else
        WriteLn('Not run from shortcut.');
     
      ReadLn;
    end.

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,
    Citation Envoyé par aimer_Delphi Voir le message
    ce que je cherche c'est de détecter si l'application est lancée depuis son raccourci ou de son dossier d'installation.
    Pour quoi faire ? Ça t'amènera au même résultat...

    Citation Envoyé par aimer_Delphi Voir le message
    SVP , existe-t-il une autre solution sans passer par les paramètres Inno Setup ?
    Bien sûr, et tu as depuis le début la solution sous le nez, sans passer par toutes ces complications (au passage je note que la discussion est alors que ce n'est pas encore le cas...) :

    Citation Envoyé par aimer_Delphi Voir le message
    lors du lancement de mon logiciel ce dernier cherche les fichiers qui se trouvent dans le dossier d’installation (qui sont nécessaires pour le fonctionnement de l'application), mais il ne trouve rien.
    Il te suffit bêtement et simplement de tester la présence de ces fichiers nécessaires pour déterminer si le programme est dans le bon dossier ou pas... Sergio t'avait mis sur la piste, mais le fait d'avoir mal posé le problème l'a embrouillé (présence d'un fichier bidon quand des fichiers valides sont tout autant nécessaires).

    Je ne vois pas ce qu'il y a de compliqué là : si les fichiers nécessaires ne sont pas présents; c'est que l'utilisateur a bidouillé quelque chose, tu peux donc l'en informer.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Bonjour,

    Pour quoi faire ? Ça t'amènera au même résultat...


    Bien sûr, et tu as depuis le début la solution sous le nez, sans passer par toutes ces complications (au passage je note que la discussion est alors que ce n'est pas encore le cas...) :


    Il te suffit bêtement et simplement de tester la présence de ces fichiers nécessaires pour déterminer si le programme est dans le bon dossier ou pas... Sergio t'avait mis sur la piste, mais le fait d'avoir mal posé le problème l'a embrouillé (présence d'un fichier bidon quand des fichiers valides sont tout autant nécessaires).

    Je ne vois pas ce qu'il y a de compliqué là : si les fichiers nécessaires ne sont pas présents; c'est que l'utilisateur a bidouillé quelque chose, tu peux donc l'en informer.
    Bonjour , et merci pour le suivi.
    mais je crois que tu n'a pas bien lu la discussion et les réponses .
    et je note très bien que la discussion comme j'ai motionné est bien

  13. #13
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par aimer_Delphi Voir le message
    Une autre solution que j'ai trouvé , peut être ça va être utile a autre .

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    // https://stackoverflow.com/questions/36267584/delphi-where-is-the-shortcut-that-started-the-application
     
    program GetShortCutTest;
     
    {$APPTYPE CONSOLE}
     
    uses
      Windows;
     
    const
      STARTF_TITLEISLINKNAME = $800;
     
    function GetShortcutName(out LinkName: string): Boolean;
    var
      si: TStartupInfo;
    begin
      Result := False;
      FillChar(si, SizeOf(TStartupInfo), 0);
      GetStartupInfo(si);
      if (si.dwFlags and STARTF_TITLEISLINKNAME) <> 0 then
      begin
        Result := True;
        LinkName := PChar(si.lpTitle);
      end;
    end;
     
    var
      sLink: string;
     
    begin
      if GetShortcutName(sLink) then
        WriteLn('Shortcut: ' + sLink)
      else
        WriteLn('Not run from shortcut.');
     
      ReadLn;
    end.
    excellent, je ne savais pas que c'était possible
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  14. #14
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par aimer_Delphi Voir le message
    mais je crois que tu n'a pas bien lu la discussion et les réponses .
    Mais bien sûr que j'ai tout lu, et depuis le début, où l'on peut lire ça :

    Citation Envoyé par aimer_Delphi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    si raccourci  alors 
       lancer l''application
    sinon
      message(l''application doit être exécutée à partir de son raccourci.)
    Ce qui revient à interdire un double clic sur le .exe situé dans le dossier d'installation.

    C'est l'utilisateur qui va être surpris !

    Enfin bon, j'dis ça j'dis rien, hein...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par Jipété Voir le message

    Enfin bon, j'dis ça j'dis rien, hein...

    c'est avec vous quand apprend toujours.
    merci pour le suivie

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 04/09/2014, 12h11
  2. Réponses: 0
    Dernier message: 15/10/2012, 17h39
  3. Réponses: 2
    Dernier message: 05/04/2012, 14h06
  4. Réponses: 3
    Dernier message: 06/02/2012, 17h16
  5. [D7/CLX] Détecter si l'application est déjà lancée
    Par cedricgirard dans le forum EDI
    Réponses: 2
    Dernier message: 23/02/2006, 18h27

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