• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto [C#] Scrivere su file i caratteri digitati

gedamial

Utente Senior
Autore del topic
9 Giugno 2010
1.937
69
Miglior risposta
0
Salve.

Volevo scrivere un programma (in background) in C# che mi scrive ogni singolo carattere digitato in un file di testo (spazi inclusi).
Nell'evento KeyPress con l'e.KeyPress ho impostato il codice così:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Mi sono però accorto che nel file di prova mi scrivere solamente l'ultimo carattere digitato. Vedendo bene da MSDN, il File.WriteAllText prima di scrivere cancella
quel che c'è già scritto e, quindi, l'ultimo carattere avrà la meglio nel mio caso.

Come faccio ad arrivare al mio intento?

Grazie in anticipo!
 
Salve.

Volevo scrivere un programma (in background) in C# che mi scrive ogni singolo carattere digitato in un file di testo (spazi inclusi).
Nell'evento KeyPress con l'e.KeyPress ho impostato il codice così:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Mi sono però accorto che nel file di prova mi scrivere solamente l'ultimo carattere digitato. Vedendo bene da MSDN, il File.WriteAllText prima di scrivere cancella
quel che c'è già scritto e, quindi, l'ultimo carattere avrà la meglio nel mio caso.

Come faccio ad arrivare al mio intento?

Grazie in anticipo!

perché devi usare File.AppendAllText(String path,String contenuto)
 
perché devi usare File.AppendAllText(String path,String contenuto)

Fatto e funziona grazie!

MA avendo messo un ciclo infinito, l'ultima lettera che scrivo mi viene ripetuta all'infinito finchè non cambio lettera (per poi passare a quella).
Ho bisogno della condizione che mi verifichi SE un tasto è stato premuto
 
Fatto e funziona grazie!

MA avendo messo un ciclo infinito, l'ultima lettera che scrivo mi viene ripetuta all'infinito finchè non cambio lettera (per poi passare a quella).
Ho bisogno della condizione che mi verifichi SE un tasto è stato premuto

se usi l'evento keyPress viene generato Un KeyEvent quando effettivamente è stato premuto un tasto, quindi non serve il ciclo ^^
 
ah quindi non visibile e metterlo nelle icone di notifica ? devi impostare this.visible=false e poi mostrare il notifyicon

Facendo così:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

1. Nelle icone di notifica non appare e poi quando scrivo qualcosa non mi copia ciò che scrivo sul file di testo.
Questo è dovuto al fatto che non ho il focus sul Form1 quando scrivo.

2. Io vorrei che il tutto funzionasse senza "focussare" sul Form1.
 
Facendo così:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

1. Nelle icone di notifica non appare e poi quando scrivo qualcosa non mi copia ciò che scrivo sul file di testo.
Questo è dovuto al fatto che non ho il focus sul Form1 quando scrivo.

2. Io vorrei che il tutto funzionasse senza "focussare" sul Form1.

hai settato un icona per il notifyicon? senza il focus sul form devi usare un funzione di sistema GetAsyncKeyState , funzione contenuta in User32.dll.
 
hai settato un icona per il notifyicon? senza il focus sul form devi usare un funzione di sistema GetAsyncKeyState , funzione contenuta in User32.dll.

Conosco quella funzione. La uso spesso con C++ su Console più o meno in questa maniera:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

In questo caso a me serve questo algoritmo:

-Utente digita un tasto
-Scrivere tale tasto su file

Come lo applico con la funzione GAKS? L'evento KeyPress mi serve comunque?
 
Conosco quella funzione. La uso spesso con C++ su Console più o meno in questa maniera:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

In questo caso a me serve questo algoritmo:

-Utente digita un tasto
-Scrivere tale tasto su file

Come lo applico con la funzione GAKS? L'evento KeyPress mi serve comunque?

l'evento keypress , dato le circostanze non serve più , inoltre devi scrivere direttamente il prototipo delle funzioni che vai ad usare

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

restituisce un int16 , e la costante -32767 rappresenta lo stato di premuto. Quindi fai un ciclo , in un thread separato che scorre tutti i caratteri da 0 a 255 e passa alla funzione GetAsyncKeyState quel valore se risulta premuto , converti in carattere e lo aggiungi al file :soso:

----
Puoi usare anche un timer se vuoi @HabboFanNumero1
 
Ultima modifica:
l'evento keypress , dato le circostanze non serve più , inoltre devi importare e scrivere direttamente il prototipo delle funzioni che vai ad usare

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

restituisce un int16 , e la costante -32767 rappresenta lo stato di premuto. Quindi fai un ciclo , in un thread separato che scorre tutti i caratteri da 0 a 255 e passa alla funzione GetAsyncKeyState quel valore se risulta premuto , converti in carattere e lo aggiungi al file :soso:

Ok, ascolta.

Il codice che mi hai dato è un prototipo di GetAsyncKeyState? Dove lo devo mettere?
Poi, ecco come ho impostato il codice:

Perfavore, Entra oppure Registrati per vedere i Link!


Se vedi, ho creato un nuovo Thread chiamato ciclo che richiama la funzione "ScorrimentoCaratteri"
In quest'ultima funzione, come imposto il codice? Da quel che ho capito, in tale funzione dovrei scorrere tutti i caratteri della tabella ascii e passarli alla funzione GAKS qualora uno dei quali venisse premuto.
Ho cercato di creare quest'ultima funzione, ma non saprei come continuare (e soprattutto se ho impostato bene il ciclo)
@TBH
 
Ok, ascolta.

Il codice che mi hai dato è un prototipo di GetAsyncKeyState? Dove lo devo mettere?
Poi, ecco come ho impostato il codice:

Perfavore, Entra oppure Registrati per vedere i Link!


Se vedi, ho creato un nuovo Thread chiamato ciclo che richiama la funzione "ScorrimentoCaratteri"
In quest'ultima funzione, come imposto il codice? Da quel che ho capito, in tale funzione dovrei scorrere tutti i caratteri della tabella ascii e passarli alla funzione GAKS qualora uno dei quali venisse premuto.
Ho cercato di creare quest'ultima funzione, ma non saprei come continuare (e soprattutto se ho impostato bene il ciclo)
@TBH

sorry , te l'avevo scritto in visual basic comunque diventa
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
sorry , te l'avevo scritto in visual basic comunque diventa
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Ah ecco! Infatti sono rimasto un po' perplesso da Declare...As...

Comunque mi da tre errori anche quest'ultimo che mi hai dato:

Perfavore, Entra oppure Registrati per vedere i Link!


Ma non è la stessa cosa usare questo:

[System.Runtime.InteropServices.DllImport("user32.dll")]

?
 
Ah ecco! Infatti sono rimasto un po' perplesso da Declare...As...

Comunque mi da tre errori anche quest'ultimo che mi hai dato:

Perfavore, Entra oppure Registrati per vedere i Link!


Ma non è la stessa cosa usare questo:

[System.Runtime.InteropServices.DllImport("user32.dll")]

?

si è la stessa cosa ... ma per evitare di scrivere tutta la gerarchia di namespace di solito si importa il namespace che ti serve , se vuoi scrivere per esteso fai pure :emoji_relieved:.

la dichiarazione di una funzione non può avvenire in un namespace ecco perché ti riporta quegli errori. Infatti ti dice che in un namespace possono esserci solo delegate - enumeratori - strutture e classi
 
si è la stessa cosa ... ma per evitare di scrivere tutta la gerarchia di namespace di solito si importa il namespace che ti serve , se vuoi scrivere per esteso fai pure :emoji_relieved:.

la dichiarazione di una funzione non può avvenire in un namespace ecco perché ti riporta quegli errori. Infatti ti dice che in un namespace possono esserci solo delegate - enumeratori - strutture e classi

Ma infatti la dichiarazione l'ho fatta PRIMA del namespace:
Perfavore, Entra oppure Registrati per vedere i Link!
 
Ma infatti la dichiarazione l'ho fatta PRIMA del namespace:
Perfavore, Entra oppure Registrati per vedere i Link!

:facepalm: , può mai esserci una funzione contenuta in nessuna classe e nessun namespace ?

comunque devi scriverlo dentro la classe Form1 , non è perché ci sia DllImport è un metodo speciale eh , deve rispettare sempre le convenzioni standard :soso:
 
Ultima modifica:
:facepalm: , può mai esserci una funzione contenuta in nessuna classe e nessun namespace ?

comunque devi scriverlo dentro la classe Program , non è perché ci sia DllImport è un metodo speciale eh , deve rispettare sempre le convenzioni standard :soso:

Fatto, ma comunque mi da questo errore ora:
Perfavore, Entra oppure Registrati per vedere i Link!
 
e dove sta la parte ?

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

vedo solo un dllImport fuori dal Namespace :emoji_confused: va dentro la classe Form1 tutto questo
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Non ti capisco O.o

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

mi hai detto di metterlo in Program.cs nella classe Program e così ho fatto

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo invece l'ho sostituito con [System.Runtime.InteropServices.DllImport("user32.dll")]

Ho messo, quindi

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

dentro la classe Form1
 
Non ti capisco O.o

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

mi hai detto di metterlo in Program.cs nella classe Program e così ho fatto

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo invece l'ho sostituito con [System.Runtime.InteropServices.DllImport("user32.dll")]

Ho messo, quindi

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

dentro la classe Form1

ho scritto Program me ne sono reso conto quando ho riletto ,infatti ho modificato il mex 2 secondi dopo , comunque levalo da Program non ti serve.


in pratica il codice è così (Program.cs rimane così com'è)

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!