Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - conflitto ricezioni tasti su diversi file
Forum - C/C++ - conflitto ricezioni tasti su diversi file

Avatar
dogmatico89 (Normal User)
Newbie


Messaggi: 7
Iscritto: 23/06/2011

Segnala al moderatore
Postato alle 19:08
Giovedì, 07/07/2011
ciao a tutti.... ho fatto un programma in C che salva la pressione dei tasti su un file.... fin qua tutto semplice.... problema!!!! se io lancio 2 volte il programma questo mi crea due file sempre .txt ma con titolo diverso (che è corretto) pero se passo dal primo al secondo o viceversa scrivendo cose diverse quando vado a leggere sue due file mi trovo i caratteri mescolati tra di loro... mi spego meglio
io lacio 2 volte pippo.exe creando 2 file pippo1.txt e pippo2.txt ... ora su pippo1.txt scrivo " ciao come va tutto ok??" , mentre su pippo2.txt scrivo "sono stato al mare oggi pomeriggio" . Poi chiudo tutti e due i programmi e vado a leggere cosa si è salvato sui file e vedo che oltre a parole indecifrabili leggo pezzi di uno e dell'altro assieme....

come posso risolvere il problema????:-?

PM
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Up
1
Down
V
Segnala al moderatore
Postato alle 23:02
Giovedì, 07/07/2011
Posta il sorgente!!!

ho un problemino.... non trovo il tasto rispondi... infatti ho commentato le risposte - dogmatico89 - 08/07/11 08:43
Puoi modificare il tuo post iniziale inserendo il sorgente ... - nessuno - 08/07/11 10:07
PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 19:44
Giovedì, 07/07/2011
Dovresti postare il tuo codice, in questi casi potresti anche solo aver sbagliato una virgola ...

EDIT:

Tu vuoi salvare la pressione dei tasti su un file .txt, ma perché non puoi usare semplici getch/getche?

Codice sorgente - presumibilmente C/C++

  1. ...
  2. FILE *fp;
  3. unsigned char tasto;
  4. fp=fopen("file.txt","w");
  5. while((tasto=getch())!=27) //continua finché non premi ESC
  6. {
  7.      fprintf(fp,"%c",tasto);
  8.      //fprintf(fp,"%d",tasto); se vuoi l'ascii
  9. }
  10. fclose(fp);



Poi se vuoi file diversi fai una funzione tipo

Codice sorgente - presumibilmente C++

  1. int Genera()
  2. {
  3.      FILE *fp;
  4.      int i;
  5.      char str[100];
  6.      for(i=0;;i++)
  7.      {
  8.           sprintf(str,"file%d.txt",i);
  9.           fp=fopen(str,"r");
  10.           //se non esiste si può creare
  11.           if(fp==NULL)
  12.              {fclose(fp);
  13.               return i;}
  14.          fclose(fp);
  15.      }
  16. }
  17.  
  18. //poi nel main fai
  19. char str[100];
  20. sprintf(str,"file%d.txt",Genera());
  21. fp=fopen(str,"w");
  22. while(...)
  23. ...//e rifai il ciclo di prima



In questo modo fai una progressione di file (file0,file1,file2...)

Ultima modifica effettuata da comina8 il 08/07/2011 alle 12:38
non ci avevo pensato a una cosa del genere... usavo la GetAsyncKeyState perche cercando su google " rilevazione pressionie tasti" è la prima cosa che ho trovato.... - dogmatico89 - 08/07/11 12:47
Ognuno può usare il metodo che preferisce però in questo modo ogni cosa avviene in "locale" al programma...Se sei su windows includi la "conio.h" e le usi tranquillamente, se sui su linux ti scrivo la funzione al massimo... - comina8 - 08/07/11 18:28
P.S.: la getch legge la getche legge e scrive sulla console --> cosa ti appare sulla console ti dovrebbe apparire sul file... - comina8 - 08/07/11 18:29
PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 21:01
Giovedì, 07/07/2011
Se ho capito bene, hai scritto il classico keylogger che magari utilizza funzioni come la GetAsyncKeyState.

Dato che queste funzioni sono "globali", ovviamente facendo riferimento alla stessa tastiera, è ovvio che avrai problemi di sovrapposizioni ...

Il keylogger deve essere lanciato come unica istanza.

si alla fine è quello anche se con altre funzioni (lo utilizzo per fare delle scelte in base alle cose che scrivo e logicamente devo vedere cosa poi ho scritto).... ce una soluzione per risolvere il problema del doppio lancio?? - dogmatico89 - 08/07/11 08:42
usa la funzione Sleep per far "riposare" un pò il programma! - Pitagora - 08/07/11 08:57
Se non lo utilizzi come keylogger allora non ha senso usare quella funzione ... che vuol dire "lo utilizzo per fare delle scelte" ... ? Se non è un keylogger allora si può fare diversamente ... insomma, parliamoci chiaro ... - nessuno - 08/07/11 10:10
mi spiego meglio.... in pratica avvio questo programma che in base alle combinazioni di tasti che io premo esempio d+a+d+t+ mi apre notepad .... se cambio combinazione mi fa altro e cosi via... il problema è che se per caso mi sbaglio o mi si blocca il programma vorrei avere un file di testo - dogmatico89 - 08/07/11 12:43
dove vedere l'elenco di combinazioni che ho fatto e vedere se è la singola combinazioe che gli ha dato fastidio e la serie di tutte... - dogmatico89 - 08/07/11 12:44


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
-3
Down
V
Segnala al moderatore
Postato alle 19:37
Giovedì, 07/07/2011
:-? Come è possibile? Sicuramente sbagli qualche cosa. Se ci mostri il programma, ti sapremo dire di più.

Comunque:
Devi differenziare i due "stream" (notare le virgolette), in questo modo

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv)
  4. {
  5.         FILE *txt[2];
  6.        
  7.         txt[0] = fopen( "pippo0.txt", "w" );
  8.         if ( !txt[0] ) return -1;
  9.        
  10.         txt[1] = fopen( "pippo1.txt", "w" );
  11.         if ( !txt[1] ) return -1;
  12.        
  13.         fprintf( txt[0], "Scrivo dentro pippo0" );
  14.         fprintf( txt[1], "Scrivo dentro pippo1" );
  15.        
  16.         fclose( txt[0] );
  17.         fclose( txt[1] );
  18.        
  19.         return 0;
  20. }

:k:

P.S. perchè devi aprire il programma due volte?

Ultima modifica effettuata da Pitagora il 07/07/2011 alle 19:41
se faccio cosi pero ogni volta creo due file .txt.... invece io ne devo creare solo uno alla volta... a meno che non venga chiamato due volte il programma.... - dogmatico89 - 08/07/11 08:39
( spero che mi stia sbagliando ) Non si da un -1 a chi perde del prorpio tempo ad aiutarti ... - Pitagora - 08/07/11 08:56
ti chiedo scusa ma l'ho spinto per sbaglio..... solo che adesso non mi fa cambiare... scusa non l'ho fatto apposta... - dogmatico89 - 08/07/11 12:38
PM