Page 1 sur 1

Intégrer un éxécutale en ligne dommande

Posté : ven. 29 nov. 2013 18:34
par Amm
Je recherche un utilitaire, paramétrable, permettant de faire tourner un programme qui se lance en ligne de commande (vulgairement appelé fenêtre DOS). Cet utilitaire me permettrait de sélectionner (dans une fenêtre de l'API de windows) le fichier cible de mon programme à moi, puis, il serait capable d'en lancer l'exécution en lui passant le nom du fichier cible en paramètres.

Je vois des applications qui fonctionnent sur ce principe, où on voit le programme en ligne de commande s'exécuter. Si déjà vous pouviez m'indiquer comme ça s'appelle un truc comme ça.

Mon programme est écrit en C ANSI (indépendamment de l'API windows) et compilé en 32 bits via Bcc32 - il marche bien dans une fenêtre Cmd de Seven (évidemment) mais c'est un peu lourding à utiliser. Il marche même derrière un raccourci avec, en paramètre, le nom d'un fichier de donnée en dure

Re: Intégrer un éxécutale en ligne dommande

Posté : ven. 29 nov. 2013 19:04
par fifi23
Bonjours,
Je vois pas trop ce que tu veut faire, mais peut être le batch?
Je pense que tu doit le savoir, les fichier .bat permettent de créer des script pour MS-DOS.

Re: Intégrer un éxécutale en ligne dommande

Posté : sam. 30 nov. 2013 21:28
par Amm
C'est très difficile à expliquer et mes mots ne sont pas les bons. C'est pour ça que mes recherches Google ne donnent rien. Non ce n'est pas un batch que je veux faire.

Supposons que mon exécutable soit "affiche.exe" et qu'il fait ce que fait la commande type : afficher le contenu d'un fichier. "Affiche" ne tourne qu'en ligne de commande dans une fenêtre Cmd. Ce que je voudrais faire c'est trouver un utilitaire banalisé disons "toto.exe". "Toto.exe" tourne sous Seven en mode fenêtré classique. Quand on lance toto, il affiche l'outil de choix de fichier (de l'API de widows). L'utilisateur choisi le fichier <monfichier> [Ok] et alors toto.exe lance une commande

affiche <monfichier>

Toto serait paramétrable, soit en paramètres dans sa commande, soit dans un .ini etc. C'est pas possible que ce genre de' produit n'existe pas. Je suis un peu vieux pour me lancer dans le C++ et l'écrire avec l'API Windows. je fais du C ANSI parce que ça me permet de fabriquer des outils spécifiques, très précis, souvent pour transformer des fichiers ASCII sortant d'un produit pour les rendre compatibles avec l'entrée dans un autre.

Re: Intégrer un éxécutale en ligne dommande

Posté : dim. 1 déc. 2013 05:30
par fifi23
Je pense voir ce que tu souhaite, c'est quelque chose d'assez simple,
mais je doute que cela existe. :roll:

Sinon, en batch, je pense qu'il y à moyen de mettre le chemin d'un dossier dans une variable et ensuite lancer une commande;
ou de faire plusieurs batch... mais je doute que ceci te convienne.

Re: Intégrer un éxécutale en ligne dommande

Posté : dim. 1 déc. 2013 10:37
par Amm
C'est ce que je fais actuellement : un batch avec les noms en dure... et je normalise mes noms de fichiers avant. Mais c'est lourdingue et source d'erreur.

Un peu en marge, j'ai écrit, il y a longtemps, un programme en C, que j'ai nommé EXE.exe et qui permet d'exécuter un autre programme N fois quand les paramètres passés, à ce programme cible, comportent des * ou des ? Il y a en effet pas mal d'outils qui ne supportent pas les caractères jockers. Ca a, en plus, l'intérêt, de remettre à zéro les allocation mémoires pour le programme cible. Mais mon EXE.exe est lui aussi en ligne de commande :( .

Je n'ai eu aucune difficulté avec le C ANSI (j'avais fait du Pascal avant et de l'Assembleur) mais les appels à l'API Windows, semblent ne se faire qu'à partir du langage C++ (avec des objets). J'ai utilisé des objets dans d'autres langages (Nantucket par exemple) mais on ne pouvait que les instancier - ça j'y arrivait. En C++ je n'ai pas trouvé de méthode pour m'y mettre.

Avec les OS moderne, je ne peux même plus accéder au matériel pour, par exemple, gérer les interruption hard - il faut passer par des bibliothèques système. Ca a probablement l'avantage de ne plus planter la machine.

Sais-tu si, en C ANSI, on a accès à l'API Windows ? Dans ce cas, il serait facile d'écrire ce que je cherche...

Re: Intégrer un éxécutale en ligne dommande

Posté : mer. 18 déc. 2013 01:46
par fifi23
La je ne sais pas trop :/

Par contre, j'ai trouvé ca,:
http://en.cppreference.com/w/c/program/system
Il utilise une commande linux, grâce à la bibliothèque stdlib.h,
tu peut peut être bricoler un peu pour voir si cela marche pour le DOS.

Re: Intégrer un éxécutale en ligne dommande

Posté : mer. 18 déc. 2013 08:40
par Amm
Passer une commande système depuis le programme C : je sais faire. Enfin, je savais faire avec Turbo C; avec Bcc32, je n'arrive pas à recompiler mon source. Tu as bien fait de me rappeler la fonction system(). J'utilisais
spawnvp (P_WAIT, executable, argv); /*<process.h>*/
Pour en revenir à mon problème de base, je suis en train de me rouler dans les appels de l'API Windows depuis le C. Il faut reconnaître que c'est bien compliqué WinMain etc. J'utilise le compilateur en ligne de commande de Borland Bcc32 et ilink. C'est tout nouveau pour moi et les fichiers ressources, j'ai pas tout compris. J'ai réussi à produire quelques .exe fenêtrés (c'est déjà ça) qui tournent sous Xp et Seven mais qui, d'après un copain, plante son Vista; alors je ne sais quoi en penser pour la suite. Je ne suis pas au bout de mes peines pour résoudre le problème initial.

Re: Intégrer un éxécutale en ligne dommande

Posté : mer. 30 juil. 2014 18:57
par fifi23
Hello, c'est encore moi, :)

J'espère que tu à résolut ton probleme, si ce n'est pas le cas, je viens de tomber sur un soft qui pourrait te plaire, spécialement conçu pour les exécutable DOC:
Image

Cela s'appel D-fend et tu le trouvera ici:
http://dfendreloaded.sourceforge.net/Sc ... ml?lang=en


(Je s'est que ca fait un bail, mais bon, c'est on jamais, tu à surement trouver une solution :) )

Re: Intégrer un éxécutale en ligne dommande

Posté : mer. 30 juil. 2014 20:42
par Amm
Salut
Non je n'ai pas trouvé. Je vais tester ton truc... merci bien

Re: Intégrer un éxécutale en ligne dommande

Posté : sam. 2 août 2014 10:00
par Alain Quarré
Suis pas sûr que c'est cela que tu cherches, mais bon, voici tout de même

tu écris un batch, dans lequel tu mets:

Code : Tout sélectionner

@echo off
"chemin vers\ton\executable.exe" %1
il te suffit alors de glisser le fichier que tu veux en paramètre sur le batch, et celui-ci lancera ton exécutable avec le chemin complet du fichier ainsi déposé en paramètre de ton exécutable.

Tu peux aussi developper la variable %1 de plusieurs manières.

Si, par exemple, ton batch, l'exécutable et le fichier à passer en paramètre sont tous dans le même dossier, écris alors ton batch de cette manière:

Code : Tout sélectionner

@echo off
cd /d %~dp0
"ton executable.exe" "%~nx1"
n developpe le nom (name)
x developpe l'extension (extension)

La ligne: cd /d %~dp0 déplace le contexte d'exécution du batch au dossier dans lequel il se trouve, il peut comme cela être lancé de n'importe où
dans le developpement de la variable %0, qui correspond au chemin absolu du script en cours d'exécution,
d developpe la lettre de lecteur (drive)
p developpe le chemin (path)

Pour plus d'info sur le développement possible des variables, tape

Code : Tout sélectionner

for /?

Pour faire des test, utilise ce batch:

Code : Tout sélectionner

@echo off
echo %0
echo %1
echo "%~nx1"
pause
glisse dessus n'importe que fichier
NB: les variable %0, %1, %2, ... incluent les guillemets quand elle ne sont pas développée

Une autre méthode serait d'utiliser un prompt pour introduire le paramètre, avec un batch comme ceci:

Code : Tout sélectionner

@echo off
cd /d %~dp0
set /P Argument=Glisse le fichier de paramètre sur cette fenêtre: 
echo %argument%
"chemin vers\ton\executable.exe" %argument%
pause
NB: dans ce cas là, la variables %argument% incluera des guillemets si il y a des espace dans le chemin du fichier déposé, inutile donc dans rajouter ensuite.
Alain