PDA

Visualizza la versione completa : linguaggio C - conversione di un char a BYTE


pgnvni
21-11-2008, 19:51
Salve a tutti!

Ho qualche problema di conversione; non riesco ad ottenere perfettamente dei caratteri che passo ad una funzione della api di windows. Praticamente ho definito un altra funzione in cui il suo funzionamento il seguente:

void macchinetta(char *str)
{
int i=0;

while( i <= ( strlen(str)-1 ) )
{
keybd_event( *(str+i)-32, 0, 0, 0 );
keybd_event( *(str+i)-32, 0, KEYEVENTF_KEYUP, 0 );
Sleep(100);
i++;
}

}

Quindi noterete che la mia funzione deve ricevere una stringa e carattere per carattere deve simulare un input tramite la funzione keybd_event.

Il problema, e che il primo argomento di keybd_event di tipo BYTE. Di conseguenza la stringa che io passo fatta di char. Avendo monitorato l'output se io passo a questa funzione la stringa "ciao" avr correttamente il suo output. Le cose si complicano quando io per esempio inserisco spazi o scrivo "Ciao".

Nel Prog principale ho la seguente sintassi:


#include <stdio.h>
#include <windows.h>
#include <string.h>

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpStr, int cmdShow) {

system("start notepad");
sleep(100);

char *testo="ciao";
macchinetta(testo);

}

Allora, il programma funziona completamente, nessun errore. Il problema sono i caratteri. Ripeto, se scrivo solo "ciao" le cose vanno bene. Se comincio a cambiare le cose non va pi bene.


QUALCUNO pu aiutarmi??? :D

menphisx
21-11-2008, 21:00

MItaly
21-11-2008, 21:11
L'errore concettuale: il parametro della keyb_event non un carattere, ma un virtual-key code (http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx); la differenza tra i caratteri e i virtual-key code che i caratteri sono i simboli che vengono stampati sullo schermo, mentre i virtual-key code sono i codici dei caratteri premuti sulla tastiera, per cui il carattere A, ad esempio, la combinazione dei key code VK_SHIFT e 0x41.

oregon
21-11-2008, 21:24
Te ne accorgi se non sottrai 32 ...

pgnvni
21-11-2008, 21:43
cosa potrei fare allora per risolvere questo inconveniente?


uno switch con tutte le combinazioni o c' un modo piu semplice?

per favore aiutatemi :)

oregon
21-11-2008, 21:46
Ma "quale" inconveniente?

pgnvni
21-11-2008, 21:53
vorrei appunto risolvere questo problema con il minor numero di istruzioni possibili. Avete qualche idea di come farmi simulare l'input di "quasi" tutti i caratteri ascii?

oregon
21-11-2008, 22:00
Certo ... usando opportunamente la keybd_event secondo quanto indicato nella documentazione della funzione, che trovi su

keybd_event
http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx

(c'e' anche un esempio).

Fra l'altro, e' una funzione non raccomandata. E' meglio usare la

SendInput
http://msdn.microsoft.com/en-us/library/ms646310(VS.85).aspx

pgnvni
21-11-2008, 22:03
ho letto che i requisiti di send input sono il service pack 3 , che non dispongo. :(

oregon
21-11-2008, 22:05
Originariamente inviato da pgnvni
ho letto che i requisiti di send input sono il service pack 3 , che non dispongo. :(

Service Pack 3 di cosa?

E poi, dove l'hai letto?

Loading