Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : probleme de boucle qui marche pas au bout d'un certain nombre de tours [ Archives / Au secours ] (Leptis)

jeudi 8 décembre 2005 à 15:01:43 | probleme de boucle qui marche pas au bout d'un certain nombre de tours

Leptis

salut à tous les pro de la prog et les autres. Je vous prévien tout de suite je n'ai pas un niveau tres trerible en cpp mais j'arrive toute fois a faire quelques truc comme ce prog qui qui est cencé simuler les touches du clavier et tester toutes les posiblités. Il marche tres bien les 1600 premieres fois mais dans les environs de ce nombre il se met a délirer et a taper nimporte quoi. J'ai essayé bien des configuration mais il y a toujour ce probleme. Merci a tous ce qui serons résoudre ce délica problème.

le prog et en deux parti l'executable et un fichier texte composé de
-1
-1
-1
-1
-1
-1
-1
0

voici le code de l'executable

#include <iostream.h>
#include <time.h>
#include <windows.h>
#include <winresrc.h>
#include <cstdio>
#include <cstdlib>
#include <winuser.h>
#include <string.h>
#include <fstream.h>



void fonction(int varfonction)
{
   
    if(varfonction == 0)
    {
        keybd_event(VK_SPACE,0x20,0,0);
        keybd_event(VK_SPACE,0x20,KEYEVENTF_KEYUP,0);
        return;
    }
   
   
    if(varfonction == 1)
    {
        keybd_event('A',0,0,0);
        keybd_event('A',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
   
   
    if(varfonction == 2)
    {
        keybd_event('B',0,0,0);
        keybd_event('B',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
   
    if(varfonction == 3)
    {
        keybd_event('C',0,0,0);
        keybd_event('C',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 4)
    {
        keybd_event('D',0,0,0);
        keybd_event('D',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 5)
    {
        keybd_event('E',0,0,0);
        keybd_event('E',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 6)
    {
        keybd_event('F',0,0,0);
        keybd_event('F',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 7)
   
    {
        keybd_event('G',0,0,0);
        keybd_event('G',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
   
    if(varfonction == 8)
    {
        keybd_event('H',0,0,0);
        keybd_event('H',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
   
    if(varfonction == 9)
    {
        keybd_event('I',0,0,0);
        keybd_event('I',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
   
    if(varfonction == 10)
    {
        keybd_event('J',0,0,0);
        keybd_event('J',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 11)
    {
        keybd_event('K',0,0,0);
        keybd_event('K',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 12)
    {
        keybd_event('L',0,0,0);
        keybd_event('L',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 13)
    {
        keybd_event('M',0,0,0);
        keybd_event('M',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 14)
    {
        keybd_event('N',0,0,0);
        keybd_event('N',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 15)
    {
        keybd_event('O',0,0,0);
        keybd_event('O',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 16)
    {
        keybd_event('P',0,0,0);
        keybd_event('P',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 17)
    {
        keybd_event('Q',0,0,0);
        keybd_event('Q',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 18)
    {
        keybd_event('R',0,0,0);
        keybd_event('R',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction ==19)
    {
        keybd_event('S',0,0,0);
        keybd_event('S',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 20)
    {
        keybd_event('T',0,0,0);
        keybd_event('T',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 21)
    {
        keybd_event('U',0,0,0);
        keybd_event('U',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 22)
    {
        keybd_event('V',0,0,0);
        keybd_event('V',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 23)
    {
        keybd_event('W',0,0,0);
        keybd_event('W',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 24)
    {
        keybd_event('X',0,0,0);
        keybd_event('X',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 25)
    {
        keybd_event('Y',0,0,0);
        keybd_event('Y',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
    if(varfonction == 26)
    {
        keybd_event('Z',0,0,0);
        keybd_event('Z',0,KEYEVENTF_KEYUP,0);
        return;
    }
   
}




int main()
{
   
    int a =0;
    int varfonction = 0;
   
       
            int vari1;
            int vari2;
            int vari3;
            int vari4;
            int vari5;
            int vari6;
            int vari7;
       
            ifstream fichier;
            fichier.open("adresse du fichier texte");
            fichier >> vari1 >> vari2 >> vari3 >> vari4
            >> vari5 >> vari6 >> vari7 >> a;
            fichier.close();
           
           
       
        for(int b=0;b<1000;b++)
        {
           
           
            a++;
           
           
            vari1 ++;
            if (vari1 == 27)
            {
                vari2++;
                vari1=0;
            }
           
            if (vari2 ==27)
            {
                vari3++;
                vari2=0;
            }
            if (vari3 ==27)
            {
                vari4++;
                vari3=0;
            }
            if (vari4 ==27)
            {
                vari5++;
                vari4=0;
            }
            if (vari5 ==27)
            {
                vari6++;
                vari5=0;
            }
            if (vari6 ==27)
            {
                vari7++;
                vari6=0;
            }
            if (vari7 ==27)
            {
                printf("recherche termine reslutat non trouvee\n");
                system("pause");
                break;
            }
           
            varfonction =   vari1 ;
            fonction(varfonction);
           
           
            if(vari2 != -1 )
            {
                varfonction =   vari2;
                fonction(varfonction);
            }
            if(vari3 != -1 )
            {
                varfonction =   vari3;
                fonction(varfonction);
            }
            if(vari4 != -1 )
            {
                varfonction =   vari4;
                fonction(varfonction);
            }
            if(vari5 != -1 )
            {
                varfonction =   vari5;
                fonction(varfonction);
            }
            if(vari6 != -1 )
            {
                varfonction =   vari6;
                fonction(varfonction);
            }
            if(vari7 != -1 )
            {
                varfonction =   vari7;
                fonction(varfonction);
            }
           
           
           
            
            keybd_event(VK_RETURN,0x1C,0,0);
           
           
           
            printf("%d %d %d %d %d %d %d  \t %d\n",vari1,vari2,vari3,vari4,vari5,vari6,vari7,a);
           
           
           
               
           
           
           
           
        }
                ofstream fichier2;
                fichier2.open("adresse du fichie texte");
                fichier2 << vari1 << "\n" << vari2 << "\n" << vari3 << "\n" << vari4 << "\n" <<
                 vari5 << "\n" << vari6 << "\n" << vari7 << "\n" << a;
                 fichier2.close();
                 system("possibilites.exe");
                 
               
}






jeudi 8 décembre 2005 à 15:30:58 | Re : probleme de boucle qui marche pas au bout d'un certain nombre de tours

Alcantornet

juste en passant : tu pourait mettre des switch à la place de tous ces if



jeudi 8 décembre 2005 à 15:34:06 | Re : probleme de boucle qui marche pas au bout d'un certain nombre de tours

Leptis

ouai mais sa regle toujour pas mon problème



jeudi 8 décembre 2005 à 16:05:10 | Re : probleme de boucle qui marche pas au bout d'un certain nombre de tours

vecchio56

Administrateur CodeS-SourceS
Avec un tableau, ce sera un peu plus court:

int lettre[] = {VK_SPACE, 'A', ..., 'Z'};
keybd_event(lettre[varfonction],0x20,0,0);
keybd_event(lettre[varfonction],0x20,KEYEVENTF_KEYUP,0);

Tu pourrais pas donner un code propre, sans E/S inutiles, qu'on puisse tester et voir le problème?

jeudi 8 décembre 2005 à 19:37:03 | Re : probleme de boucle qui marche pas au bout d'un certain nombre de tours

NAVIE

Leptis utilise au lieu de tous ces if switch comme ca ce sera plus simple


switch(variable)
{
       case Valeur1:
            Instruction....
            break;
       case Valeur2:
            Instruction....
            break;
       case Valeur3:
            Instruction....
            break;
       default:
            Instruction....
            break;
}


vendredi 9 décembre 2005 à 00:42:59 | Re : probleme de boucle qui marche pas au bout d'un certain nombre de tours

vdust

A part la syntaxe (la solution de vecchio56 est la plus efficace et la plus portable), revenons au problème initial. Ce qu'il faut bien comprendre, c'est que l'envoi d'un évément et son traitement par le système sont asynchrones : l'événement est placé dans une pile en attendant d'être traité... on ne sait pas a priori quand. Or, ton programme tourne en continu et va envoyé très probablement les événements plus vite que le système ne peut les traiter (d'autant qu'il solicite de manière intensive le processeur pendant tout le processus). La pile se retrouve donc rapidement saturée (vers la boucle 1600 ???) et tous les messages qui ne peuvent pas entrer dans la pile sont tout simplement ignorés (il me semble), ce qui conduit à la perte de certains messages ; d'où le comportement constaté. Une solution est de donner à la fin de chaque boucle un peu de temps au système pour traiter les événements envoyés, grâce à la fonction Sleep(nombre_de_millisecondes), placée juste après ta ligne "keybd_event(VK_RETURN,0x1C,0,0);". Je pense que Sleep(5); est raisonnable (tu peux tenter de réduire encore cette valeur si tu souhaites que ton programme tourne plus vite. Mais moins le système a de temps pour traiter les messages, plus les risques de perte augmentent).
Je n'ai pas testé, mais j'espère que celà solutionnera ton problème.

Une autre remarque si tu utilises (ce qui est pratiquement une certitude ^^) Windows 2000 ou XP : MSDN préconise l'emploi de la fonction SendInput à la place de keydb_event sur ces systèmes.


-- Virtual Dust --


vendredi 9 décembre 2005 à 17:41:22 | Re : probleme de boucle qui marche pas au bout d'un certain nombre de tours

Leptis

Avant tout merci a tous pour vos réponse. Pour repondre a vdust j'avais deja pensé a une surcharge du proc et j'avais mis un wait une seconde et au bout de 26 minutes (1600 boucles) toujour le meme probleme. J'ai meme pensé a une saturation
de la ram voila pourquoi le prog s'eteind et ce relance au bout de mille combinaisons. J'ai essayé les sendInput mais le prob persite.        

vendredi 9 décembre 2005 à 18:23:02 | Re : probleme de boucle qui marche pas au bout d'un certain nombre de tours

Leptis

Réponse acceptée !
Apres beausoup d'essai mon prog marche finalement merci a tous pour votre aide tres precieuse !!!!!!!!!!!!!!!!



Cette discussion est classé dans : return, event, keybd, varfonction, keyeventf


Répondre à ce message

Sujets en rapport avec ce message

Simulation Clavier (keybd_event) --- URGENT ! [ par Omeya ] Bonjour,J'essaye de simuler des touches de clavier avec mon programme, en utilisant la commande : keybd_event (13,0,0,0); keybd_event (13,0,KEYEVENTF_ probleme avec keybd_event [ par kornetmuse ] salut tout le monde.. j'apprend a me servir de keybd_event mais comprend pas tout ^o)j'ai ecris ca dans mon code C if (keybd_event(27,0,0,0)) [debutant] keybd_event [ par socksucks ] Salut à tous,Pour un projet c, j'ai besoin d'une fonction qui intercepte les touches F1...F12 du clavier pour que lorsque l'utilisateur presse une de keybd_event et sleep [ par Xentor609 ] salut,J'utilise keybd_event pour simuler des touches du clavier.Juste qu'ici, j'ai aucun problème.Mais imaginons que j'utilise un sleep juste après, l pb keybd_event [ par mat74 ] salut a ts ,j'utilise la fonction keybd_event(num touche, 0, 0, 0); pr simuler des touches a,b,c ... , la sa marche tres bien . Mais j'aimerai bien s Probleme avec VK_.... ( balayage clavier ) [ par morgandetoi06 ] voila j aimerait simuler l appui des touches "alt" + "="mais je ne trouve pas le code de la touche "="( elle est située à gauche du backspace )voila l problème pour simuler touches [ par jeromedu94 ] bonjour,je voudrais simuler les touches windows et D pour aller sur le bureau, j'ai essayer ça mais ça ne marche pas et je ne vois pas pourquoi, si qu keybd_event ? [ par ncoder ] Bonjour à toi lecteur,Peux-tu m'expliquer ce problème là s'il te plait ?Regarde, j'ai fait ce petit programme :int main(){char rep[50];printf("Texte : keybd_event [ par Steph115 ] Bonjour,pour simuler une combinaison de touches (par exemple ALT+ENTRER) il faut utiliser cette fonction la : keybd_event(VK_MENU,0x38,0,0); keybd_eve lancer une application en tache de fond(sans fenetre) [ par bapdur ] voila mon code il a pour but de faire clignoter les 3 lumiere du clavier num lockcapslock et scroll lockjaimerai cependant lameliorer en enlevant la f


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.