Demande de code

[Résolu]
Signaler
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010
-
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010
-
Bonjour, je suis nouveau sur ce forum et j'ai remarqué qu'il y avait beaucoup de personnes compétente dans le langage C. De plus je dois dire, que je ne suis pas très calé et c'est pourquoi je viens poster.

J'ai fait un code en C++ qui deande un mot de passe, trois en faite, et si on se trompe dans l'un un commande est effectué, et si les trois sont bon, le prgramme se ferme.

Le seule soucis, c'est que j'aimerai laissé seulement 30 secondes pour entrer un mot de passe. Voilà.

Quelqu'un peut-il m'aider ? Merci d'avance pour les réponses.


Cordialement,

WoWcrax

27 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Regarde la fonction SetTimer() sur MSDN et la notification correspondante : WM_TIMER

A+
____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Je te conseil de lire le livre de Petzold que tu pourras trouver sur le site de Brunews:
http://www.brunews.com/cptclic.aspx?id=21&fl=upload_code/cp5.zip

Il y a tout dedans pour débuter en programmation Windows.
A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Du coup comme tu utilises la console pour afficher tes mdp, tu ne peux pas utiliser SetTimer. Il faut que tu crées le tiens...
Regarde la fonction GetLocalTime()
A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Crée un thread qui fera Sleep(30000); et un autre pour demander le mot de passe. Si le premier a fini avant le deuxième, quitte l'appli.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Bonjour,

Pour ce problème, j'utiliserai un timer réglé sur 30 secondes et non un second thread.

A+


____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Tu aurais un exemple de code stp Pistol_Pete ? Merci bien.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Cool merci.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

J'ai bien trouver ce code:
#include <windows.h>
#include <mmsystem.h>
/***** Déclaration de la classe *****/
class Timer
{
LONGLONG start_time;
LONGLONG cur_time;
LONGLONG last_time;
float time_elapsed;
float time_scale;
float GetTimePerf();
//float GetTime();
public:
Timer();                                 // Constructeur
~Timer();                               // Destructeur

void Start();                            // Initialisation du timer
float GetTotalElapsedTime();     // Temps écoulé depuis l'initialisation du timer
float GetElapsedTime();            // Temps écoulé entre deux appels de la fonction
};
/***** Description des méthodes de la classe *****/
Timer::Timer()
{
}
Timer::~Timer()
{
}
void Timer::Start()
{
LONGLONG perf_cnt = 0;
//if (QueryPerformanceFrequency((LARGE_INTEGER *) &perf_cnt)){
time_scale = 1.0f / perf_cnt;
QueryPerformanceCounter((LARGE_INTEGER *) &start_time);
last_time = start_time;
//}else{
// start_time last_time timeGetTime();
// time_scale = 0.001f;
//}
}
//float Timer::GetTime()
//{
//return (float)timeGetTime();
//}
float Timer::GetTimePerf()
{
QueryPerformanceCounter((LARGE_INTEGER *) &cur_time);

return (float)cur_time;
}
float Timer::GetTotalElapsedTime()
{
cur_time = this->GetTimePerf();
time_elapsed = (cur_time - start_time) * time_scale;
last_time = cur_time;
return time_elapsed;
}
float Timer::GetElapsedTime()
{
cur_time = this->GetTimePerf();
time_elapsed = (cur_time - last_time) * time_scale;
last_time = cur_time;
return time_elapsed;
}

Mais il ne fonctionne pas. Le message d'ereur est undefined reference to `WinMain@16'
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Si tu as creer un projet console, le point d'entré de ton programme est la fonction main. Si tu as creer un projet windows, le point d'entré est le WinMain.

La le compilo te dit juste qu'il n'a pas trouvé la fonction WinMain.

A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Oui, mais je l'ajoute où ? Parce que quand je l'ajoute au debut j'ai une cascade d'erreurs.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Ok, merci. Je donnerai des nouvelles quand j'aurai fini de lire.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Bah, j'ai fini de lire et ça m'aide pas :( dommage.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Livre de Charles Petzold
Les Timer : Section 1 chapitre 8

Comment ca ca ne t'aide pas?
A+
____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Ca ne m'aide pas, parce que tout les codes que je trouve qui font limité du temps ne s'assimile pas avec mon code présent, il s'exécute soit avant, soit après.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Oui effectivement, il faut utiliser les callback pour que ca marche...


____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Tu peux m'en dire un peu plus sur ça ??
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Pas plus de ce qui est écrit dans le livre de Petzold.
En deux mots, tous les éléments de ton interface graphique sont considérés comme des objets qui interagisse avec des messages.
Les messages sont soit envoyés par Windows (ordre de redessiner la fenetre, timer...) soit par une action que tu as fait : un clique de souris, l'appuie sur une touche...

Ainsi le programme entre en action que quand il y a des messages à traiter ce qui permet de ne pas monopoliser le CPU. Puisque dans 90% du temps, le programme ne fait qu'attendre une action.
Les fonctions qui traitent ces messages sont des fonctions callback.

En utilisant ce procédé, ton timer sera exécuter en même temps que la saisi de caractère.

A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

En clair, quelqu'un pourrait-il me donner un code qui limite la saisie de mot de passe à 30 sec a partir de clui ci-dessous ?

Voici le code pour entrer le mot de passe :
#include <cstdlib>
#include <conio.h>
#include <stdlib.h>
#include 
#include <time.h>
#include <stdio.h>
#include <windows.h>
#include <winable.h>


using namespace std;

int getnombre()
{

  HWND hConsole = GetConsoleWindow();
  HMENU hMenu = GetSystemMenu( hConsole, false );

  if( DeleteMenu ( hMenu, SC_CLOSE, MF_BYCOMMAND ))
  cout << "(1/3)Veuillez saisir le premier mot de passe pour fermer ce programme." << endl;
  int c;
  int n=0;
  do
        {
                c=getch();
                if (c>='0' && c<='9')
                {
                        n*=10;
                        n+=(c-'0');
                        cout << "*";
                        cout.flush();
                }
        }
        while(c!=13);
        cout << endl;
        return n;
}	int timeleft;
int main()
{
        system ("color 04");
        int a;
        a=getnombre();
        if (a == 84955222)
           {
                  cout << "(2/2) Bon mot de passe." << endl;
           }

        else

           {
                  cout << "Mot de passe saisi incorrecte.
system("pause")
}
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Ok merci je vais voir.
Messages postés
16
Date d'inscription
mercredi 7 juillet 2010
Statut
Membre
Dernière intervention
27 novembre 2010

Apparement getlocaltime sert juste a avoir la date et l'heure.