programme en tache de fond

programme en tache de fond - C - Programmation

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

Reply

Marsh Posté le 20-12-2004 à 18:41:28   

Reply

Marsh Posté le 20-12-2004 à 19:47:27    

maerlin666 a écrit :

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


Ca dépend du système. Quel système ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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

Reply

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)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-12-2004 à 20:06:31    

maerlin666 a écrit :

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


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...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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)


Message édité par leneuf22 le 20-12-2004 à 21:06:34
Reply

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 ?


Message édité par maerlin666 le 22-12-2004 à 16:06:03
Reply

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


Message édité par leneuf22 le 22-12-2004 à 16:48:20
Reply

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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.

Reply

Marsh Posté le 22-12-2004 à 21:42:24   

Reply

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é ?

Reply

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).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed