• 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

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!

Perfetto, grazie!

La prima tappa è risolta: creato un Thread, creato il prototipo di funzione GAKS, importata la user32.dll

Ora manca la funzione principale che deve svolgere il Thread. Questa funzione avrà un ciclo (vedi
Perfavore, Entra oppure Registrati per vedere i Link!
) che ciclerà appunto la tabella ascii dal primo (0) all'ultimo (255) carattere verificando, eventualmente, la pressione di uno di questi. Nel caso in cui uno di essi venga premuto, tale sarà convertito in carattere e aggiunto al documento di testo.

Come fare ciò? Avendo creato la "bozza" della funzione facente tutto questo, come procedo?
 
Perfetto, grazie!

La prima tappa è risolta: creato un Thread, creato il prototipo di funzione GAKS, importata la user32.dll

Ora manca la funzione principale che deve svolgere il Thread. Questa funzione avrà un ciclo (vedi
Perfavore, Entra oppure Registrati per vedere i Link!
) che ciclerà appunto la tabella ascii dal primo (0) all'ultimo (255) carattere verificando, eventualmente, la pressione di uno di questi. Nel caso in cui uno di essi venga premuto, tale sarà convertito in carattere e aggiunto al documento di testo.

Come fare ciò? Avendo creato la "bozza" della funzione facente tutto questo, come procedo?

ti sei dato la risposta da solo , se passi un valore alla funzione GetAsyncKeyState ti dice se è premuto o meno. se è premuto(quindi uguale alla costante -32767) lo aggiungi convertendolo. Probabilmente non sai come convertire quindi te lo scrivo

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

N.b il 255 non è a caso rappresenta i caratteri del codice ascii.

Ovviamente quando avrai completato e se osservi la tabella ti renderai conto di alcune cose , quindi modificherai l'indice di partenza :soso: @HabboFanNumero1
 
ti sei dato la risposta da solo , se passi un valore alla funzione GetAsyncKeyState ti dice se è premuto o meno. se è premuto(quindi uguale alla costante -32767) lo aggiungi convertendolo. Probabilmente non sai come convertire quindi te lo scrivo

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

Uhm... ho provato a scrivere questo codice ma non funziona:
Perfavore, Entra oppure Registrati per vedere i Link!
 
sempre,ma infatti non arriva a 255

Si scusa, avevo messo 255 nella condizione del ciclo invece di 256 :emoji_relieved:

Comunque sia, ancora non mi scrive nulla sul file di testo :|

Update:

Uddio funziona! hihi! Solo che me le scrive tutte in maiuscolo le lettere. Come faccio a dirgli che se le ha scritte in minuscolo deve copiarle così come sono nel file di testo? Credo sia un po' difficile in quanto nella ascii ci sono indicate solo le lettere maiuscole o sbaglio?

Update:

Tralasciando il problema delle lettere maiuscole, quando scrivo i punti e virgola, i cancelletti eccetera, sul file di testo mi scrive simboli. Valutando bene, ho capito che GAKS fa riferimento NON al codice ascii ma ai KeyCode che poco raramente hanno valore uguale per alcuni caratteri.

Il KeyCode dei punti e virgola, per esempio, è 186 mentre il suo ASCII è 59

Perché allora me lo da sotto forma di simboli?
@TBH
 
Ultima modifica:
Si scusa, avevo messo 255 nella condizione del ciclo invece di 256 :emoji_relieved:

Comunque sia, ancora non mi scrive nulla sul file di testo :|

Update:

Uddio funziona! hihi! Solo che me le scrive tutte in maiuscolo le lettere. Come faccio a dirgli che se le ha scritte in minuscolo deve copiarle così come sono nel file di testo? Credo sia un po' difficile in quanto nella ascii ci sono indicate solo le lettere maiuscole o sbaglio?

allora per metterle in minuscolo basta che le converti in string e poi fai .ToLower() , ma è il problema di minor entità
ma il problema non è risolto :asf:
perché alcuni caratteri speciali non devono essere considerati e altri controllati inoltre devi identificare quando è attivo il blocco maiusc e quando no in modo da decidere se scrivere in minuscolo o meno :soso:

per semplificarti la vita non tiri in ballo altre api ma vai ad abusare di un namespace disponibile in vb
Perfavore, Entra oppure Registrati per vedere i Link!
.
 
allora per metterle in minuscolo basta che le converti in string e poi fai .ToLower() , ma è il problema di minor entità
ma il problema non è risolto :asf:
perché alcuni caratteri speciali non devono essere considerati e altri controllati inoltre devi identificare quando è attivo il blocco maiusc e quando no in modo da decidere se scrivere in minuscolo o meno :soso:

per semplificarti la vita non tiri in ballo altre api ma vai ad abusare di un namespace disponibile in vb
Perfavore, Entra oppure Registrati per vedere i Link!
.

Ho capito cos'è il My Namespace ma non capisco come adattarlo al mio problema.

Comunque, ora che vedo, mi converte in strani simboli persino le lettere accentate... ma perché se stanno nella tabella ascii????
 
Ho capito cos'è il My Namespace ma non capisco come adattarlo al mio problema.

Comunque, ora che vedo, mi converte in strani simboli persino le lettere accentate... ma perché se stanno nella tabella ascii????

in realtà i cosiddetti "strani simboli " non sono così immotivati per la conversione dato che si tratta di un formato non standard. per avere una conversione pulita dovresti usare MapVirtualKey -GetKeyBoardLayout-ToUnicodeEx, ma non è il caso.
A questo punto con uno switch controllati quei caratteri che ti servono ed escludi i primi 30 che non servono. My ti serve solo per verificare se c'è il block maius attivo
 
Se vuoi scrivere un software che lavori in background devi utilizzare la classe BackgroundWorker, inoltre, @TBH ti ha detto bene di utilizzare la funzione GetAsyncKeyState perché di fatto è quella la funzione che si occupa di verificare l'avvenuta pressione di un tasto. Tuttavia io non sono d'accordo, per un'operazione del genere e, in generale, per tutte le operazioni che riguardano la gestione della tastiera, è bene implementare un hook di sistema sulla tastiera. Dal momento che non è un argomento molto facile sul quale si possono dare indicazioni, se non dopo aver studiato qualcosa a riguardo, va bene utilizzare GetAsyncKeyState. Magari in un prossimo futuro questo programma lo "aggiornerai" implementando l'hook di sistema.
 
Ma in C# non si parla di tabella ascii ma di key codes (
Perfavore, Entra oppure Registrati per vedere i Link!
)

ma infatti stai usando una funzione di user32.dll, non centra il C#.
Quando fai Convert.ToChar usi un encoder di tipo unicode (quì è il problema di quei strani caratteri). Ti ripeto se non vuoi implementare le hook devi per forza controllare manualmente i singolo valori :soso: o altrimenti come t'avevo già detto MapVirtualKey -GetKeyBoardLayout-ToUnicodeEx.
 
Ultima modifica:
ma infatti stai usando una funzione di user32.dll, non centra il C#.
Quando fai Convert.ToChar usi un encoder di tipo unicode (quì è il problema di quei strani caratteri). Ti ripeto se non vuoi implementare le hook devi per forza controllare manualmente i singolo valori :soso: o altrimenti come t'avevo già detto MapVirtualKey -GetKeyBoardLayout-ToUnicodeEx.

Chiariamoci. In questa tabella (
Perfavore, Entra oppure Registrati per vedere i Link!
) c'è scritto CHIARAMENTE che il tasto SHIFT ha un numero ascii pari a 0. Ho messo un controllo che SE il numero ascii è uguale a 0 allora quel carattere non lo scrive proprio (
Perfavore, Entra oppure Registrati per vedere i Link!
)

Il problema è che quando premo SHIFT (che è 0!) lo scrive comunque!
 
Chiariamoci. In questa tabella (
Perfavore, Entra oppure Registrati per vedere i Link!
) c'è scritto CHIARAMENTE che il tasto SHIFT ha un numero ascii pari a 0. Ho messo un controllo che SE il numero ascii è uguale a 0 allora quel carattere non lo scrive proprio (
Perfavore, Entra oppure Registrati per vedere i Link!
)

Il problema è che quando premo SHIFT (che è 0!) lo scrive comunque!

levando il fatto che così come è scritto è sbagliato ... ma tutti i valori da escludere sono numero compresi da 0 a 30.(escluso 13) fai partire i da 30. Inoltre tutti quei valori che hanno codice ascii 0 (equivale a null quindi non influisce, è solo per ottimizzare)
Devi tener conto dei seguenti casi :
I valori tra 112 a 126 sono f1 a f10.
I valori tra 33-46 sono da considerare
I valori tra 186-187 e 189-191-192 sono valori di indecisione (non ottenibili quindi)
I valori tra 219 a 221 sono risolvibili controllando il blocco maius e alt (tramite il namespace My)
I Valori tra 48 -111 devono essere controllati singolarmenti

il resto dei tasti devi controlla se c'è il blocco maius attivo e li scrivi piccoli altrimenti grandi
 
levando il fatto che così come è scritto è sbagliato ... ma tutti i valori da escludere sono numero compresi da 0 a 30.(escluso 13) fai partire i da 30. Inoltre tutti quei valori che hanno codice ascii 0 (equivale a null quindi non influisce, è solo per ottimizzare)
Devi tener conto dei seguenti casi :
I valori tra 112 a 126 sono f1 a f10.
I valori tra 33-46 sono da considerare
I valori tra 186-187 e 189-191-192 sono valori di indecisione (non ottenibili quindi)
I valori tra 219 a 221 sono risolvibili controllando il blocco maius e alt (tramite il namespace My)
I Valori tra 48 -111 devono essere controllati singolarmenti

il resto dei tasti devi controlla se c'è il blocco maius attivo e li scrivi piccoli altrimenti grandi

Da 48 a 111 singolarmente? :O