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 :

Exécuter un EXE DOS sans ouvrir de fenêtre de commande


Sujet :

Delphi

  1. #1
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 160
    Points : 6 478
    Points
    6 478
    Billets dans le blog
    2
    Par défaut Exécuter un EXE DOS sans ouvrir de fenêtre de commande
    Bonjour,

    Je sais que c'est possible, car je l'ai déjà fait il y a une dizaine d'années ... mais j'ai perdu les sources . Je veux créer un exécutable Windows qui fasse "programme.exe fichier.txt" (donc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'Open','D:\Projets\Jeux\MCP.exe','D:\Projets\Jeux\BI3\FRA\Mcp000.txt',nil,SW_SHOWDEFAULT);
    Ce code marche parfaitement, mais ouvre une fenêtre de commande DOS et on ne sais même pas si tout s'est bien passé. L'application donnait ceci :
    Nom : Example 1.jpg
Affichages : 2029
Taille : 41,8 Ko
    Le clic sur "décodage" donnait :
    Nom : Example 2.jpg
Affichages : 2421
Taille : 92,0 Ko
    Et le clic sur "encodage" faisait la manip inverse, mais le tout sans jamais ouvrir de fenêtre "CMD".

    Si quelqu'un a une idée, elle sera la bienvenue, car mon seul souvenir de cette programmation est qu'elle m'avait demander pas mal de temps pour trouver la solution.

    Quelqu'un aujourd'hui me demande les sources pour les adapter à sont problème, mais ...
    Pierre GIRARD

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ P. Girard, ce sont des fichiers audio ?

    Qui pouvaient s'ouvrir avec le logiciel mpcTOmp3 ?

    Donnes nous un peu plus des précisions, quant à la gestion de la fenêtre Dos, on peut la manipuler et elle peut être en Hide.

    Edit : ce lien pourra t'aider : http://www.felix-colibri.com/papers/...he_source_code

    @+,

    Cincap

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    Bonjour,

    ton programme DOS c'est MCP.exe ? et tu le lances depuis ton programme Windows à l'aide de Shellexecute ? ton programme Windows lance MCP.exe avec comme paramètre un fichier txt en entrée, puis il écrit les résultats dans un fichier txt que tu relis avec ton programme Windows et que tu affiches dans le Memo de ta fenêtre principale ? Est ce bien cela ?

    si oui, tu dois mettre SW_HIDE à la place de SW_SHOWNORMAL

    A+

    Charly

  4. #4
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 160
    Points : 6 478
    Points
    6 478
    Billets dans le blog
    2
    Par défaut
    Dans mon cas, il s'agit d'un jeux, il y a un fichier.txt et un fichier.dat pour chaque mission du jeux. Ces fichiers sont encodés et MCP.EXE les décodes/réencode successivement. ça permet de les modifier avec un simple éditeur pour ajouter/modifier des missions au jeux.

    Dans tous les cas, ce n'est que l'exemple que je connais, je cherche une réponse plus générale pour utiliser un exécutable DOS sur Windows sans avoir à ouvrir une fenêtre CMD.

    D'ailleurs, dans mon cas, il est parfaitement possible de lancer la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (chemin du programe)\MCP.exe (chemin du fichier)\fichier.xxx
    directement à partir de "exécuter" ... mais c'est moins pratique si on a une dizaine de fichiers.dat + une dizaine de fichiers.txt (ça fait lancer 20 fois la même commande).
    Pierre GIRARD

  5. #5
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 160
    Points : 6 478
    Points
    6 478
    Billets dans le blog
    2
    Par défaut
    J'ai apparemment une réponse, mais je me demande si c'est celle que j'avais adoptée à l'époque.

    Tout d'abord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,nil,'D:\Projets\Jeux\MCP.exe','D:\Projets\Jeux\BI3\FRA\Mcp000.txt',nil,SW_HIDE);
    Donc, avec "SW_HIDE = pas de fenêtre "CMD" apparente. Par ailleurs, 'open' ne semble servir à rien dans ce cas (pas plus que handle).

    Ensuite, dans l'entête des fichiers, qu'ils soient encodés ou pas, il y a : "TPWM". Du coup, je me demande si à l'origine, je n'avais pas les sources et donc le fichier MCP.pas en plus du fichier MCP.exe ... et que j'avais enrobé les sources Turbo Pascal d'origine directement dans les sources Delphi de mon programme. Donc, par curiosité, si quelqu'un retrouve un fichier MCP.pas en Turbo Pascal quelque part, ça m'intéresse.

    Avant de mettre en résolu, je serais intéressé par un avis concernant l'utilisation de "SW_HIDE" et de savoir si c'est judicieux (et donc la meilleure, voir la seule solution).
    Pierre GIRARD

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    Bonjour,

    oui pour moi c'est ce qu'il faut faire : SW_HIDE cache la fenêtre et c'est bien la bonne solution.

    Mais je pensais que ton problème était plus compliqué ...

    A+

    Charly

  7. #7
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 160
    Points : 6 478
    Points
    6 478
    Billets dans le blog
    2
    Par défaut
    Oui, c'est tellement simple ... mais tous les exemples que j'ai trouvé se terminaient par "SH-SHOW...quelque chose", jusqu'à ce que je tombe sur un document énonçant toutes les possibilités.

    Par ailleurs, j'ai une nouvelle question (mineure, c'est juste par curiosité). L'erreur quand on utilise des "string" au lieu de PChar dans les paramètres de "ShellExecute" est différente sous XE2 qui parle de "PWideChar" ... c'est quoi la différence sachant que si on déclare "PChar(chemin+'MCP.exe')", ça marche sans erreur sous XE2 ?

    Donc, c'est quoi la différence entre "PWideChar" de XE2 et les "PChar" des versions précédentes. Et que faut-il utiliser (dans mon cas, vu que la compatibilité descendante n'est pas mon problème) ?
    Pierre GIRARD

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  9. #9
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 160
    Points : 6 478
    Points
    6 478
    Billets dans le blog
    2
    Par défaut
    Merci pour le lien, mais comme toujours, avec John Colibri, c'est du bon, mais c'est du lourd pour quelqu'un de mon niveau ... = des heures de lecture pour essayer de comprendre.
    Pierre GIRARD

  10. #10
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    Bonjour,

    tu as un second lien ici, un peu moins complet, mais peut être un peu plus simple :

    Delphi 2009 et Unicode

    A+

    Charly

  11. #11
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 160
    Points : 6 478
    Points
    6 478
    Billets dans le blog
    2
    Par défaut
    Oui, merci, en fait, si je comprends bien : Char = WideChar = UTF8 et si on souhaite ne pas utiliser UTF8, c'est AnsiChar (pareil pour string)

    Franchement, j'aurais jamais osé écrire un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Procedure TForm1.Viande_de_bœuf;
    var 
    Ma_variable_à_moi : string;
    begin 
      Ma_variable_à_moi := "Suivez le bœuf";
      ...
    end;


    Par ailleurs, je passe en "résolu" car "SW_HIDE" répond parfaitement au problème présent (même si mon programme exemple d'origine n'utilisait probablement pas ça). Merci à tous les intervenants.
    Pierre GIRARD

  12. #12
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Par défaut
    WideChar = UTF-16 et UTF-8 => AnsiChar, plutôt
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  13. #13
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    Bonjour,

    tu peux écrire sans problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Ma_variable_à_moi := 'Suivez le bœuf';
    mais avec de simples quotes (les doubles cotes, c'est pour d'autres langages comme visual Basic par exemple)

    Bon code ...

    A+

    Charly

  14. #14
    Expert éminent

    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2002
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 160
    Points : 6 478
    Points
    6 478
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Bonjour,

    tu peux écrire sans problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Ma_variable_à_moi := 'Suivez le bœuf';
    mais avec de simples quotes (les doubles cotes, c'est pour d'autres langages comme visual Basic par exemple)

    Bon code ...

    A+

    Charly
    Effectivement

    Pour ce qui est de UTF8 ou UTF16, du moment que ça marche sans avoir à se cogner la tête contre les murs ... c'est le principal.

    Malgré tout, ça prouve que ce codage des caractères est complexe ... et que j'avais raison de rester perplexe après la lecture du cours de J Colibri. Ce qui est certain, c'est que ça dépasse largement mon niveau.

    Heureusement que j'avais posté dans la rubrique "débutant". Et que finalement j'ai appris quelque chose.
    Pierre GIRARD

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

Discussions similaires

  1. exécution d'une macro sans ouvrir le fichier
    Par sash6 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/05/2008, 11h49
  2. .exe Windows sans Console ou Fenêtre
    Par xtello dans le forum Windows
    Réponses: 1
    Dernier message: 05/04/2008, 16h33
  3. Lancer une commande dos sans voir la fenêtre
    Par Nicopelo dans le forum Windows
    Réponses: 2
    Dernier message: 07/06/2007, 09h12
  4. Exécution de marco Excel sans ouvrir Excel
    Par fledev dans le forum VBScript
    Réponses: 4
    Dernier message: 17/11/2006, 19h52
  5. Comment exécuter un fichier .Bat sans ouvrir la console DOS
    Par digital prophecy dans le forum Windows XP
    Réponses: 4
    Dernier message: 20/06/2006, 12h01

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