Comment cacher la fenêtre de console ? [Divers / Windows] - Divers - Programmation
Marsh Posté le 18-11-2011 à 13:29:11
http://www.codeproject.com/KB/winsdk/runsilent.aspx
A+,
Marsh Posté le 18-11-2011 à 14:00:05
Bonjour gilou ! Merci.
Je pige rien à l'english, j'ai regardé, peut-être trop rapidement.. La procédure décrite ici est l'écriture d'un second programme exécutant le premier sans fenêtre...Si j'ai pigé ?
Y pas moyen de faire ça dans mon processus directement ?
Merci.
Marsh Posté le 18-11-2011 à 14:43:27
Le problème, c'est que tu crées pas un programme Windows directement, tu laisses le compilateur/linker faire ça pour toi (parce que ton main va être incorporé à un Winmain, etc).
Donc comme tu n'as pas de contrôle sur les paramètres de création de la fenêtre, tu es coincé.
Ou alors, il faut que tu écrives tout comme un vrai programme windows, un winmain, une classe de fenêtre, etc.
A+,
Marsh Posté le 18-11-2011 à 17:07:47
Donc, je produit bien qu'un seul exécutable ...
Je n'ai pas compris alors comment passer le nom ou l'adresse de mon programme.
Je vais regarder...
Marsh Posté le 18-11-2011 à 17:29:30
Je sais pas compiler. Undefinded reference to WinMain@16
J'ai fait un simple gcc -o MonProg source.c
Marsh Posté le 18-11-2011 à 17:38:45
Bon, vu ton niveau, je ne suis pas sûr que tu vas comprendre, mais on va essayer quand même.
Ce qui conditionne l'ouverture de la fenêtre DOS ou non, c'est le module de démarrage ajouté par le compilateur (enfin, l'éditeur de lien) à la création de l'exécutable. Tu peux voir ça comme un bout de code qui va initialiser 2 ou 3 trucs (genre stdin, stdout, ...), puis appeler ta fonction main() (parce que bon, ce n'est pas le système d'exploitation qui peut avoir connaissance de ce genre de chose).
Dans le cas de Windows, il faut changer ce module de démarrage pour éviter la création de la fenêtre DOS, ça veut dire créer son propre module de démarrage (bon courrage), ou en utiliser un déjà qui ne crée pas de fenêtre DOS, pas exemple celui utilisé pour créer un programme Windows (Dans MinGW, il me semble qu'ils sont dans \MinGW\lib\*crt*.o).
Avec Code::blocks + MinGW, ça se règle dans Project=>Properties=>Build targets. Si tu choisi "GUI Application", ça va utiliser le module de démarrage Windows. Petit problème toutefois: ce module va rechercher une fonction WinMain() et non main() et son prototype est légèrement différent (notamment les arguments de la ligne de commande sont sous forme d'UNE chaine de caractère). Une fois passé le point d'entré, tu n'es pas du tout obligé de faire appel à l'API windows (genre créer une fenêtre ou avoir une boucle d'événement), tu peux parfaitement te contenter d'un programme procédural.
Marsh Posté le 18-11-2011 à 18:09:31
J'ai testé 4 trucs.
Mon programme sous ,son nom "LcdParAda" et en WinMain, comme je suis avec Ada, je ne spécifie pas le paramètre
J'ai généré un .o et un .exe, j'ai passé les deux nom comme pDefaultCMD à RunSilent.
Et au mieux, j'ai cette référence indéfini à WinMain@16.
Mais je cherche. enfin, je creuse.
Marsh Posté le 18-11-2011 à 18:13:49
tpierron, si c'est en rapport avec son écriture sur le LCD connecté au port parallèle, pour monitorer l'état de sa machine, c'est plus vers un service qu'il faudrait s'orienter, non?
Jovalise, tu veux faire quoi exactement?
A+,
Marsh Posté le 18-11-2011 à 18:16:41
Je veux exécuter LcdParAda sans avoir la fenêtre que console à gérer.
Marsh Posté le 18-11-2011 à 18:18:29
Donc une fois lancé, tu ne pourra plus l’arrêter?
A+,
Marsh Posté le 18-11-2011 à 18:19:38
gilou a écrit : Donc une fois lancé, tu ne pourra plus l’arrêter? |
Dans le task manager non plus ?
Si non, c'est pas fait pour être arrêté.
Marsh Posté le 18-11-2011 à 18:31:17
Bon ben au minimum, il va falloir essayer d'en faire une vraie appli windows, avec les bons paramètres:
gnatmake LcdParAda -largs -mwindows
ou quelque chose dans le genre
Si déjà tu as une vraie appli windows avec une fenêtre principale, on pourra probablement cacher cette fenêtre.
A+,
Marsh Posté le 18-11-2011 à 18:37:22
Lutin !
Merci Gilou.
J'exécute le programme sans fenêtre juste comme ça.
Je vais regarder cette option de plus près.
Marsh Posté le 18-11-2011 à 18:54:31
Effet de bord pas prévu, mais si ça marche, vaut mieux pas y toucher...
A+,
Marsh Posté le 18-11-2011 à 19:04:44
gilou a écrit : Effet de bord pas prévu, |
Je me méfierait la prochaine fois. T'as trouvé comment l'option ?, je trouva rien avec Google.
gilou a écrit : |
J'ai mis dans démarrage, j'ai rebouté, pas de fenêtre... Donc, pour moi, c'est fonctionnel.
gilou a écrit : |
Gravier si non !
gilou a écrit : |
a+
Marsh Posté le 18-11-2011 à 19:22:00
>> J'ai mis dans démarrage, j'ai rebouté, pas de fenêtre... Donc, pour moi, c'est fonctionnel.
Mais tu dis pas l'essentiel: le LCD affiche les infos voulues?
Parce qui si tu as pas de fenêtre et rien sur le LCD...
A+,
Marsh Posté le 18-11-2011 à 19:26:25
A ben wouais quand même, j'affiche Cpu Usage, hostname date et heure sur 4 lignes.
Marsh Posté le 18-11-2011 à 12:38:24
Bonjour...
Je cherche le moyen de cacher la fenêtre de console à l'exécution d'un programme qui n'en nécessite pas.
Merci pour vos réponses
Message édité par Profil supprimé le 18-11-2011 à 13:19:00