Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    83

    linguaggio C - conversione di un char a BYTE

    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???
    #include <pgnvni.h>

  2. #2

  3. #3
    L'errore è concettuale: il parametro della keyb_event non è un carattere, ma un virtual-key code; 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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Te ne accorgi se non sottrai 32 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    83
    cosa potrei fare allora per risolvere questo inconveniente?


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

    per favore aiutatemi
    #include <pgnvni.h>

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma "quale" inconveniente?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    83
    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?
    #include <pgnvni.h>

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    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
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    83
    ho letto che i requisiti di send input sono il service pack 3 , che non dispongo.
    #include <pgnvni.h>

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    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?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.