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 :

[D7]Prob ShellExecute avec arguments


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de goldkey
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 802
    Par défaut [D7]Prob ShellExecute avec arguments
    Apres m'etre inspiré de la FAQ Delphi je lance la commande suivante afin d'executer "Wordpad" en lui specifiant le chemin du fichier a ouvrir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'OPEN','Wordpad.exe','C:\test.txt',Nil, SW_SHOW)
    Cel afonctionne tres bien

    Maintenant j'aimerai passé le nom du prog a executé et son argument en tant que variable, je fais donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Executable := 'Wordpad.exe';
    Argument   := 'C:\test.txt';
    ShellExecute(0,'OPEN',PChar(Executable), PChar(Argument),Nil, SW_SHOW);
    Et la je n'obtiens pas d'erreur , mais rien ne s'execute.

    Quelqu'un a-t-il une idée??
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut,

    Ben en théorie ça devrait marcher. J'ai d'ailleurs fait le test et ça marche

    Je te suggère donc d'examiner la valeur de retour de ShellExecute. Si cette valeur est inférieure à 32 [edit]ou égale[/edit] alors une erreur s'est produite.

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ExecName, FileName: string;
      RetVal: Cardinal;
      Msg: string;
    begin
      ExecName := 'WordPad.exe';
      FileName := 'C:\Install.log';
      RetVal := ShellExecute(0, 'OPEN', PChar(ExecName), PChar(FileName), nil, SW_SHOW);
      case RetVal of
        0: Msg := 'The operating system is out of memory or resources.';
        ERROR_FILE_NOT_FOUND: Msg := 'The specified file was not found.';
        ERROR_PATH_NOT_FOUND: Msg := 'The specified path was not found.';
        ERROR_BAD_FORMAT: Msg := 'The .exe file is invalid (non-Microsoft Win32 .exe or error in .exe image).';
        SE_ERR_ACCESSDENIED: Msg := 'The operating system denied access to the specified file.';
        SE_ERR_ASSOCINCOMPLETE: Msg := 'The file name association is incomplete or invalid.';
        SE_ERR_DDEBUSY: Msg := 'The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.';
        SE_ERR_DDEFAIL: Msg := 'The DDE transaction failed.';
        SE_ERR_DDETIMEOUT: Msg := 'The DDE transaction could not be completed because the request timed out.';
        SE_ERR_DLLNOTFOUND: Msg := 'The specified DLL was not found.';
        SE_ERR_NOASSOC: Msg := 'There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.';
        SE_ERR_OOM: Msg := 'There was not enough memory to complete the operation.';
        SE_ERR_SHARE: Msg := 'A sharing violation occurred.';
      end;
      if Msg <> '' then
        ShowMessage(msg);
    end;
    @+

  3. #3
    Membre émérite
    Avatar de goldkey
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 802
    Par défaut
    Merci pour ta suggestion Claudius40.
    Je n'ai pas pensé a regardé le code de sortie de ShellExecute !!
    Des fois je manque d'automatisme

    Apres quelques tests il me retourne "ERROR_FILE_NOT_FOUND".
    Encore quelques tests et je me rend compte que dans ma variable "argument" un espace c'etait glissé en debut de chaine du a une erreur lors de l'extraction de la chaine de caractere .

    Maintenant ca fonctionne parfaitement bien....

    Merci encore Claudius40

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

Discussions similaires

  1. appel d'un module externe avec argument en entree
    Par oursblanc dans le forum Modules
    Réponses: 6
    Dernier message: 20/10/2005, 23h16
  2. Comment utiliser ShellExecute avec un programme DOS ?
    Par RC10GT_MGT dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 22/09/2005, 14h23
  3. creer une fonction avec arguments
    Par niglo dans le forum ASP
    Réponses: 3
    Dernier message: 03/06/2005, 08h04
  4. SVP prob Delphi avec interbase
    Par Riri394 dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/06/2004, 16h35
  5. [C#] Equivalent Property avec arguments de VB.NET
    Par Antz dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/03/2004, 13h14

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