programme en tache de fond - C - Programmation
Marsh Posté le 20-12-2004 à 19:47:27
maerlin666 a écrit : salut, |
Ca dépend du système. Quel système ?
Marsh Posté le 20-12-2004 à 20:00:12
c'est sous windows
J'ai echangé borland 5.5 pour dev cpp
avec borland un programme WINAPI winMain ne lance pas de fenetre en fond
tandis qu'avec devcpp une fenetre style dos apparait avec le programme
si je fais un programme qui affiche un MessageBox()
avec dev cpp j'obtien le message box + une fentre noire en fond
d'ou provient la difference
Marsh Posté le 20-12-2004 à 20:05:18
ce que tu appelles des programmes "WINAPI WinMain" sont des programmes destinés à afficher une fenêtre (si tu créé une classe de fenêtre). si tu n'as pas créé de classe de fenetre et que tu ne l'as pas registrée, tu n'auras pas de fenêtres.
sous DevCPP, tu as du créer un programme en ligne de commande, donc qui se lance via une fenêtre de commandes.
si tu veux faire un serveur qui tourne en tache de fond sous XP, le mieux est de faire un service. pour les autres Windows (98/ME), tu dois créer une fenêtre que tu n'afficheras pas via par exemple ShowWindow(SW_HIDE)
Marsh Posté le 20-12-2004 à 20:06:31
maerlin666 a écrit : c'est sous windows |
Il faut faire une application 'GUI' sans fenêtre et non une application 'console'.
Mais je ne suis pas spécialiste de Windows. Il existe des forums spécialisés pour ça. Ici, c'est plutôt le C général et orienté matériel...
Marsh Posté le 20-12-2004 à 21:04:40
Autre méthode :
Tu fais un programme console, et tu mets l'offset 0xDC à 02 au lieu de 03, et t'auras plus de console.
(je signale juste l'astuce comme ça hein, c'est pas la meilleure façon)
Marsh Posté le 22-12-2004 à 16:05:45
ok merci,
effectivement j'avais créé un projet en mode console
Apres l'avoir transposé en mode GUI la fenetre a disparu pour la plupart des programmes mais quand je tente de faire un serveur elle revient ...
leneuf22 interessant ton astuce pour le mode console
peut tu me dire comment ca marche, ca touche au lancement meme de la fenetre ?
Marsh Posté le 22-12-2004 à 16:44:43
L'octet 0xDC correspond au champ Subsystem de la structure IMAGE_OPTIONAL_HEADER de ton exécutable
La valeur 3 correspond à IMAGE_SUBSYSTEM_WINDOWS_CUI
La valeur 2 correspond à IMAGE_SUBSYSTEM_WINDOWS_GUI
Tout ceci étant défini dans winnt.h
Plus d'informations dans la MSDN :
http://msdn.microsoft.com/library/ [...] er_str.asp
Marsh Posté le 22-12-2004 à 17:14:21
Changer l'option dans le projet c'est un peu plus simple... Surtout que l'optionnal header n'est pas forcément toujours au même endroit. Faut se baser sur le champ e_lfanew du DOS header.
Marsh Posté le 22-12-2004 à 21:42:24
C'est vrai (mais au passage, jusqu'à maintenant je n'ai vu aucun compilo se comporter autrement)
En tous cas je suis tout à fait d'accord, en en plus cette méthode elle est pas bien : c'est plus du bidouillage qu'autre chose.
Marsh Posté le 22-12-2004 à 21:54:29
En mettant la feuille de l'application en "invisible" (ShowWindow())?
Ou de taille zéro (en hauteur et largeur) mais pas sûr autorisé ?
Marsh Posté le 23-12-2004 à 01:29:31
Ben a partir de VC++7, ça se change à la volée dans les settings de ton compilo (Linker->SUBSYSTEM).
Marsh Posté le 20-12-2004 à 18:41:28
salut,
Je voudrais simplement savoir comment faire pour qu'une application se lance en tache de fond en C.
C'est a dire pour qu'aucune fenetre n'apparaisse a l'ecran.
Par exemple pour réaliser un serveur qui fonctionne en permanence sans gener le bureau
Merci