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

 C Discussion :

Aide pour Shutdown programmé


Sujet :

C

  1. #1
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut Aide pour Shutdown programmé
    Salut a tous

    Bon, voila, je suis en train de faire un programme tout simple en console, permettant d'eteindre son ordinateur a une heure precise

    J'ai deja coder jusqu'a la recuperation du temps donné par l'utilisateur, ainsi que sa conversion en secondes (car le shutdown.exe calcule en secondes)

    Voici la source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h> 
     
     
    int secondes(int minutes)
    {
        return 60*minutes;
    } 
     
    int main(int argc, char *argv[])
    {
        int minutes = 0;
    	printf ("Dans combien de temps voulez-vous eteindre votre ordinateur ? (Temps en minutes)");
    		scanf("%d", &minutes);
    	printf ("Votre ordinateur s'eteindra dans %d minutes \n\n", minutes);
        printf ("%d\n", secondes(minutes));
     
    	system ("pause");    	
    }
    Par contre, la je ne sais pas comment faire pour afficher une text box (avec Cancel) qui indique le temps restant (h, min, secondes)

    Tout en utilisant shutdown.exe mais sans afficher la text box qu'il affiche

    Merci de votre aide

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Salut,

    Si tu cherche un moyen pour calculer le temps qu'il reste, tu peux créer une boucle qui affiche le temps restant grâce à la fonction time() qui te retourne l'heure système, cette boucle appel la fonction time(),tous en vérifiant les valeur renvoyées par time(), c'est à dire tant que l'heure indiquée par l'user n'est pas atteinte, on affiche l'heure avec time().
    Si tu veux manipuler des interfaces bouttons, il fallait démarrer ton projet avec du VB, c'est très simple, car pour l'instant je vois que du C.

    A+

  3. #3
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Merci de ta reponse

    Pour l'heure, c'est plus un compte-a-rebours que je disais

    Sinon, le VB, j'ai deja essaye mais c'etait un peu trop simple, c'est plus vraiment du codage :/

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Pour le compte à rebours c'est encore plus simple, imaginons que j'insère 36000 secondes (soit après une heure), tu fais une boucle qui prend cette valeur et la décremente tant que tu n'a pas atteint 0, tu fais un sleep de 1 et à chaque fois tu décrémente la valeur 36000 de une unité et ainsi de suite...
    sa doit être un truc dans ce style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(valeur_user != 0)
             { 
               sleep(1);
               --valeur_user;
               if (valeur_user == 0)
                  shutdown();
             }

  5. #5
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Ah okey, merci

    Et je peux inserer cela dans une text box ?

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Bien sûre, mais si tu reste dans le C, tu dois utiliser une librairie graphique comme SDL, gtk ou autre.
    Sinon un script VB pourra trés bien faire l'affaire même si c'est easy comme truk...

  7. #7
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Librairie graphique pour afficher une simple text box ?

    Sur cette source, j'en vois pas :/
    => http://msdn.microsoft.com/en-us/libr...05(VS.85).aspx

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Tu peux très bien utiliser ça, mais sache qu'en utilisant <windows.h>, tu fais bien appel à une lib appartenant à Microsoft, qui contient déjà toutes les fonctions pour gérer des fenêtres et des interfaces graphiques !

  9. #9
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Ah okey, merci

    Edit :

    Sur le site de la MSDN, il propose ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    int DisplayResourceNAMessageBox()
    {
        int msgboxID = MessageBox(
            NULL,
            (LPCWSTR)L"Resource not available\nDo you want to try again?",
            (LPCWSTR)L"Account Details",
            MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
        );
     
        switch (msgboxID)
        {
        case IDCANCEL:
            // TODO: add code
            break;
        case IDTRYAGAIN:
            // TODO: add code
            break;
        case IDCONTINUE:
            // TODO: add code
            break;
        }
     
        return msgboxID;
    }
    Par contre, je ne sais comment l'appeler dans le code pour afficher la text box

  10. #10
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Regardes la biblioothèque Win32

    Il faut savoir :
    1. Faire une fenetre
    2. afficher un label
    3. utiliser le Timer
    4. affiché un bouton
    5. gérer les actions quand tu cliques sur un bouton

    N'hésites pas a poster du code ou des questions.

  11. #11
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    La bibliothèque win32 ? C'est quoi ?

  12. #12
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Citation Envoyé par Antoinejdu44 Voir le message
    La bibliothèque win32 ? C'est quoi ?
    Celle de Windows. Donc utilisable seulement sous Windows 'mais necessitant pas spécialement de Dll suplémentaires.

    voir ici, pour la FAQ :
    http://chgi.developpez.com/windows/

  13. #13
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Okey, merci

    Mais, sa ne me dit pas comment j'appelle ce bout de code

    Pour les fonctions, j'ai compris comment on affiche la valeur, mais la ce n'est pas une valeur :/

  14. #14
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Citation Envoyé par Antoinejdu44 Voir le message
    Okey, merci

    Mais, sa ne me dit pas comment j'appelle ce bout de code

    Pour les fonctions, j'ai compris comment on affiche la valeur, mais la ce n'est pas une valeur :/
    non mais en fait, si tu veux a chaque seconde modifier la valeur, il faut que tu fasses une fenetre de dimension reduite avec un label (pour afficher le temps) et avec un bouton (pour annuler)

    Pour le bout de code, le probleme est que le programme bloque tant que l'utilisateur n'a pas cliqué sur un bouton (sauf si tu fais sur un thread.. ce qui est un peu plus compliqué.

  15. #15
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Ah, okey, merci

    Je vois le truc

  16. #16
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Citation Envoyé par katcha95 Voir le message
    ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(valeur_user != 0)
             { 
               sleep(1);
               --valeur_user;
               if (valeur_user == 0)
                  shutdown();
             }
    J'ai un probleme avec le shutdown, il me met une erreur c2198, en me disant qu'il n'y a pas assez d'argument pour faire un appel :/

  17. #17
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    Citation Envoyé par Antoinejdu44 Voir le message
    J'ai un probleme avec le shutdown, il me met une erreur c2198, en me disant qu'il n'y a pas assez d'argument pour faire un appel :/
    La fonction shutdown est utilisé pour les socket.
    fait un appel system :


  18. #18
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Je ne vois pas l'utilité d'inclure windows.h dans ton code initial. Sinon, tu peut utiliser Sleep () avec une boucle pour déterminer le temps d'attente et la commande Windows shutdown, help shutdown pour en savoir plus ...

    Les paramètres de la fonction main me semblent inutiles sinon (tu peut les remplacer par void éventuellement).

  19. #19
    Membre chevronné
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2008
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2008
    Messages : 525
    Par défaut
    Merci de votre aide

    Maintenant, j'ai cree le compte a rebours en secondes, mais j'ai un probleme avec le Sleep :/

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int foisSoixante(int minutes)
    {
        return 60*minutes;
    } 
     
    void main()
    {
    	int minutes= 0;
    	int secondes = 0;
        int nombreSecondes = 0;
     
    	printf ("\nDans combien de temps voulez-vous eteindre votre ordinateur ? (Temps en minutes)");
    	scanf("%d", &minutes);
     
        nombreSecondes = foisSoixante(minutes);    
     
        printf ("%d\n\n", nombreSecondes);
     
        system ("pause");
     
    	while (nombreSecondes !=0)
    	{
     
    		printf ("Il reste %d\n", nombreSecondes);
    		nombreSecondes--;
                    Sleep (1000);
     
    	}
     
    	system ("pause");
    }
    Voici le journal de sortie
    1>c:\documents and settings\administrateur\mes documents\visual studio 2008\projects\autoshutdown v0.2\autoshutdown v0.2\main.c(17) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306)*: voir la déclaration de 'scanf'
    1>c:\documents and settings\administrateur\mes documents\visual studio 2008\projects\autoshutdown v0.2\autoshutdown v0.2\main.c(30) : warning C4013: 'Sleep' non défini(e)*; extern retournant int pris par défaut
    1>Édition des liens en cours...
    1>main.obj : error LNK2001: symbole externe non résolu _Sleep
    1>C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2008\Projects\AutoShutdown v0.2\Debug\AutoShutdown v0.2.exe : fatal error LNK1120: 1 externes non résolus
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2008\Projects\AutoShutdown v0.2\AutoShutdown v0.2\Debug\BuildLog.htm"
    1>AutoShutdown v0.2 - 2 erreur(s), 2 avertissement(s)
    Lorsque je retire le Sleep, le compteur a rebours marche mais est beaucou^p trop rapide

  20. #20
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Citation Envoyé par Antoinejdu44 Voir le message
    Lorsque je retire le Sleep, le compteur a rebours marche mais est beaucoup trop rapide
    Sleep ne fonctionne pas parce qu'il faut, cette fois, inclure windows.h.

    Voici ton code corrigé, commenté et qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    # include <stdio.h>
    # include <stdlib.h>
    # include <windows.h> /* à inclure cette fois pour utiliser Sleep (sous Windows) */
     
    void clean_stdin (void);
    void pause (int);
     
    int ConvertSecondes (int minutes)
    {
        return 60*minutes;
    }
     
    int main (void) /* C'est comme ça que je voulais dire, void remplace les paramètres (pas obligatoire mais plus rigoureux), et main est préfixée par int */
    {
        int i = 0, temps = 0; /* Ces variables suffisent */
        printf ("Dans combien de temps voulez-vous eteindre votre ordinateur ? (Temps en minutes)\n");
        scanf("%d", &temps);
        temps = ConvertSecondes (temps);
        printf ("arret de l'ordinateur dans %d secondes\n\n", temps);
        pause (1); /* le paramètre 1 sert à prendre en compte que le buffer n'est pas vide, sinon on met 0 */
    	for (i = 0 ; i<=temps ; i++)
        {
            printf ("%i minutes restantes ...\n", i); /* ligne facultative */
            Sleep (1000);
    	}
    	/* pas de pause ici sinon l'arret ne sera plus automatique */
    	system ("shutdown /s"); /* Pour arrèter Windows Vista, à vérifier si c'est pareil sous XP ... */
    	return 0; /* à ne pas oublier */
    }
     
    /* fonctions facultatives : */
     
    void clean_stdin (void) /* fonction pour vider le buffer */
    {
        int c = 0;
        do
        {
            c = getchar();
        } while (c != '\n' && c != EOF);
    }
     
    void pause (int b)
    /* fonction portable pour marquer une pause, tu peut réutiliser system ("pause"); si tu le souhaites */
    {
        printf ("\nAppuyez sur ENTER pour continuer\n");
        if (b==0)
            getchar ();
        else if (b==1)
        {
            clean_stdin ();
            getchar ();
        }
    }
    ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. aide pour un programme en cpp
    Par ml1985 dans le forum C++
    Réponses: 6
    Dernier message: 28/12/2006, 19h48
  2. [débutant] besoin d'aide pour un programme
    Par acdchornet dans le forum C++
    Réponses: 12
    Dernier message: 26/10/2006, 22h32
  3. Réponses: 13
    Dernier message: 26/10/2006, 21h02
  4. [Free Pascal] Besoin d'aide pour un programme
    Par ricomix dans le forum Free Pascal
    Réponses: 3
    Dernier message: 04/06/2006, 17h01
  5. aide pour un programme a compiler
    Par letombeur dans le forum C++
    Réponses: 8
    Dernier message: 11/01/2006, 21h53

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