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

API, COM et SDKs Delphi Discussion :

Comment utiliser ShellExecute avec un programme DOS ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut Comment utiliser ShellExecute avec un programme DOS ?
    Je veux faire fonctionner un programme DOS (16 bit j'imagine) à l'aide de Delphi.

    Quand j'execute la commande suivante, le programmedos.exe démarre pas...

    ShellExecute(F_Main.Handle,'open','programmedos.exe', nil, nil, SW_HIDE);

    Quand j'execute la commande suivante, le programmedos.exe démarre bien...

    WinExec('programmedos.exe', SW_HIDE);

    Est-ce qu'un programme DOS doit absolument démarrer avec WinExec pour fonctionner ??? Comment faire pour le faire démarrer avec ShellExecute ???

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Par défaut
    Essaie dans les deux cas de fournir un chemin d'accès complet au programme...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    Meme avec un chemain complet...Avec WinExec ca fonctionne et ShellExecute c ane fonctionne pas

  4. #4
    rbh
    rbh est déconnecté
    Membre chevronné Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Par défaut
    Salut
    Les programmes Win16, quand il sont exécuté le sont via un processus WowExec.exe (wow = Win16OverWin32 <> World of Warcraft ).
    A mon avis il faut "ShellExecuter" wowexec et passer ton prog en paramêtre.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Par défaut
    T'as de la chance Sillycoder arrive !

    Reisubar n'a pas du tout tord.
    La réponse à ta question est des plus simples : c'est le chemin. Essaye donc une instruction du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(Handle,'open', 'C:\...\programmedos.exe'), nil, nil, SW_HIDE);
    où "C:\...\" est le chemin bien évidemment. Si tu souhaite exécuter un prog présent dans le même répertoire que ton dossier ou dans le répertoire des commandes dos, tu peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(Handle,'open', extractfilePath(application.exename)+'programmedos.exe'), nil, nil, SW_SHOWNORMAL);
    Sinon je te conseille de plutôt utiliser la commande suivante pour vérifier que le programme dos s'exécute réellement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(Handle,'open', extractfilePath(application.exename)+'programmedos.exe'), nil, nil, SW_SHOWNORMAL);
    Ciao !

    Si la vie était faite de lignes de code, on n'en serait encore au begin

  6. #6
    Membre confirmé

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Par défaut
    Citation Envoyé par sillycoder
    Si la vie était faite de lignes de code, on n'en serait encore au begin
    pas pour tout le monde ...

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Par défaut
    Si cela marche avec WinExec pourquoi utiliser Shellexecute ?
    Il y a aussi create process pour lancer des applications

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 22
    Par défaut
    Bonjour,

    Je viens de tester avec un exe en Clipper; j'ai mis le code suivant dans un bouton.onclick pour lancer cet exécutable DOS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute(Application.Handle,PChar('open'),PChar('PathEtFilename.exe'),nil,nil,SW_NORMAL);
    Et ça marche !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2005
    Messages : 7
    Par défaut
    C'est peut-être mon programmedos.exe qui est trop tordu ou vieux pour l'exécuter à l'intérieur de Delphi....

  10. #10
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 25
    Par défaut
    Bonjour,

    Essai avec ça, je l'ai retrouvé dans mes vieux sources:

    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
    function WinExecAndWait32(FileName: string; Visibility: Integer): Integer;
    var
      zAppName: array[0..512] of Char;
      zCurDir: array[0..255] of Char;
      WorkDir: string;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      StrPCopy(zAppName, FileName);
      GetDir(0, WorkDir);
      StrPCopy(zCurDir, WorkDir);
      FillChar(StartupInfo, Sizeof(StartupInfo), #0);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;
      if not CreateProcess(nil,
        zAppName, { pointer to command line string }
        nil, { pointer to process security attributes }
        nil, { pointer to thread security attributes }
        False, { handle inheritance flag }
        CREATE_NEW_CONSOLE or { creation flags }
        NORMAL_PRIORITY_CLASS,
        nil, { pointer to new environment block }
        zCurDir, { pointer to current directory name }
        StartupInfo, { pointer to STARTUPINFO }
        ProcessInfo) then { pointer to PROCESS_INF }
        Result := -1
      else
      begin
        WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
      end;
    end;
    _____________________
    Modération : Merci de ne pas oublier les balises Code, NoisetteProd

Discussions similaires

  1. [VBA] Comment utiliser Access avec Excel
    Par MxPx_23 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/02/2006, 12h00
  2. [Cygwin]Comment utiliser gprof avec Windows ?
    Par Invité dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 04/02/2006, 12h36
  3. Comment utiliser Word avec Delphi 7 ?
    Par muquet dans le forum Débuter
    Réponses: 9
    Dernier message: 06/12/2005, 18h52
  4. Comment utiliser AddItem avec un TComboBox ?
    Par richard038 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 01/08/2005, 17h58
  5. Réponses: 12
    Dernier message: 02/02/2004, 13h41

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