Ir ao conteúdo
  • Cadastre-se

bilbol

Membro Júnior
  • Posts

    15
  • Cadastrado em

  • Última visita

posts postados por bilbol

  1. #include<stdio.h>
    #include <windows.h>
    #include <conio.h>
    int x =1;
    autobot() {
           
      while( x=1 ) {
      
      INPUT inputs[4];
    
      ZeroMemory(inputs, sizeof(inputs));
    
        inputs[0].type = 1;
        inputs[0].ki.wVk = 0x5A;
    
        inputs[1].type = 1;
        inputs[1].ki.wVk = 0X25;
    
        inputs[2].type = 1;
        inputs[2].ki.wVk = 0X5A;
        inputs[2].ki.dwFlags = KEYEVENTF_KEYUP;
    
        inputs[3].type = 1;
        inputs[3].ki.wVk = 0X25;
        inputs[3].ki.dwFlags = KEYEVENTF_KEYUP;
    
    SendInput(4, inputs, sizeof(INPUT));
    
    Sleep(1000);
    
    }
    }
    int main (){
        autobot();
    }

    meu objetivo é parar este código uma tecla especifica a qualquer momento sem interromper o loop para ler o código como scanf() faz e depois poder retormar, não sei que comando usar dentro da condição que consiga detectar essa tecla ou se mesmo tal coisa é possivel nessa estrutura..

    • Haha 1
  2. 37 minutos atrás, arfneto disse:

    De volta ao programa

     

    Pode nem considerar o que eu expliquei. A lógica do que você quer fazer é simplesmente não usar o buffer da entrada.
    Não daquele modo ingênuo que habita este forum por exemplo, tentando usar fflush() ou setbuf() que foram escritas para algo muito diferente.

     

    LINE INPUT MODE, Cooked Mode, Raw MODE

     

    O Windows chama o modo de leitura do teclado de LINE INPUT MODE e está claro associado ao ECHO MODE. Unix e derivados usam a noção de Cooked/raw mode. Eu devo ter explicado isso na discussão que postei e não vou fazer isso de novo aqui.

     

    Eis o resumo:

     

    A entrada via teclado em geral espera um ENTER. É uma questão de eficiência e inteligência: se retornar antes do ENTER em geral é uma m3rd@ porque por exemplo você não pode corrigir um erro usando backspace e as setas e reescrevendo o que errou. Então seu programa para e fica esperando o resultado da leitura, mesmo que seja uma letra só. Mas você pode ir digitando, voltando e corrigindo até o ENTER.

     

    No entanto por exemplo em um jogo onde você usa ASWZ para mover o cursor ou as setas e fazer um bloco andar na ela, você não pode imaginar um prompt dizendo "digite  a direção para onde quer ir e tecle ENTER" ... :D 

     

    É o que acontece com seu programa.

     

    Em Windows uma maneira de fazer isso é ler o buffer de teclado e não o teclado, como eu mostrei nos programas. Usando PeekConsoleInputBuffer(). É bem simples.

     

    Mas entenda que se desligar o lance de LINE INPUT funções como fgetc() e read() e scanf() e tudo que ler de stdin vão ler sempre o que tiver para ser lido e o programa não para. E se desligar também o ECHO pode escolher se vai mostrar o que foi digitado, porque as vezes não se quer e às vezes precisa esperar pra ver se tem um backspace depois :) 

     

    Isso se faz chamando SetConsoleMode()  no Windows e ioctl() no Linux. No Linux se manipula os valores de VMIN e VTIME, em geral para ZERO mesmo. No Windows é só um shor int se bem me lembro

     

    caramba, eu li o seu texto e só consegui entender que textos requerem ENTER, removi o texto e agora o código funciona do jeito que eu queria haha, muito obrigado!

    Citação

     

     

     

     

  3. @Lucca Rodrigues voce entendeu errado. O meu codigo funciona perfeitamente, só colocar ele em rodar que ele ficar pressionando teclas infinitamente mas eu gostaria que ele rodasse em segundo plano exemplo.: eu minimizo o compilador e abro o wordpad dai no wordpad a tecla começa a se repetir no texto, porém isso não ocorre, o código para ao minimizar ou até mesmo clicar fora de sua janela.

    • Curtir 1
  4. @Lucca Rodrigues não sei onde esta esse botao code

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


    autobot()           {

           /* Display message until key is pressed. */
    while( _kbhit!=(0) ) {
              _cputs( "Hit me!! " );
        // This structure will be used to create the keyboard
        // input event.

        INPUT ip;

        // Pause for 5 seconds.

    Sleep(1000);
        // Set up a generic keyboard event.
        ip.type = 1;

        ip.ki.wScan = 0; // hardware scan code for key
        ip.ki.time = 0;
        ip.ki.dwExtraInfo = 0;
    if(ip.type == 1){
        // Press the "A" key
        ip.ki.wVk = 0x5A; // código da tecla em hexadecimal
        ip.ki.dwFlags = 0; // valor 0 pra indicar que a tecla ta sendo pressionada
        SendInput(1, &ip, sizeof(INPUT)); // envia a entrada

        // Release the "A" key
        ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP pra tecla sendo solta
        SendInput(1, &ip, sizeof(INPUT)); // envia a entrada

       // Use _getch to throw key away. */


    printf( "\nKey struck was '%c'\n", _getch());

    }
    }
    }
    int main (){
        autobot();
    }

     

  5. boa tarde criei um macro em loop infinito e gostaria que ele continuasse a rodar em segundo plano mas ele sempre para e só volta se eu digitar manualmente dentro do programa, pela imagem da pra ter uma ideia do que eu quero fazer, gostaria que o Z estivesse sendo digitado sem parar no espaço do bloco de notas. Alguem me ajuda?

     

     

    printmacro.png

  6. 19 minutos atrás, .if disse:

    Olha a tabela asc-ii

    89a3710ca406392c97651653c6c14deb.jpg

    Para transformar 'a' em 1 basta subtrair-lhe 96 algo como 'a'-96=1

     

    
    // Online C compiler to run C program online
    #include <stdio.h>
    const char numero[]="abcdefghijklmnopqrstuvwxyz";
    unsigned char num1,num2,num26;
    int main() {
        // Write C code here
        num1=numero[0]-96;
        printf("%d\n",num1);
        num2=numero[1]-96;
        printf("%d\n",num2);
        num26=numero[25]-96;
        printf("%d\n",num26);
        return 0;
    }

    teste em

    https://www.programiz.com/c-programming/online-compiler/

    Que lhe sirva de norte🙂

    eu ja estou ciente disso eu só não sei como eu faço pra associar a leitura de uma palavra com o calculo da soma tipo printf("Digite um nome"); scanf("%c", nome); printf("%d", somadasletrasdonome);

  7. 51 minutos atrás, .if disse:

    Mostre o que você tentou fazer. Dica: cada letra tem seu código numérico asc-ii. Uma subtração simples converte de letra pro número que você quer.

    o problema é na hora de ler a palavra e somar, não faço a menor ideia como fazer funcionar de forma que a quantidade de letras fique dinamico sem compremeter o calculo

    51 minutos atrás, .if disse:

    Mostre o que você tentou fazer. Dica: cada letra tem seu código numérico asc-ii. Uma subtração simples converte de letra pro número que você quer.

    @.if <code> #include <stdio.h>

    const char numero[]="abcdefghijklmnopqrstuvwxyz";


    int main (){
        int i=0;
         int valorfinal[140];
        char a,b,c,d,e,f,g,h;
        int soma;

        while(++i){
            if(numero[i-1]==0) break;
           valorfinal[i+96] = numero[i-1]-('a'-1);


    }

    printf("meu caro amigo diga o que queres:");
    scanf("%c%c%c%c",&a,&b,&c,&d);
    soma = valorfinal[a] + valorfinal[b]+ valorfinal[c]+ valorfinal[d];
    printf("%d",soma);}  <code>

     

    eu sei que meu calculo esta zoado, um exemplo é se voce digitar 3 letras ou menos e deixar um espaço em branco, ele vai bugar, queria saber como resolver isso, só consegui ver o índice do vetor (ex.: valorfinal -> [ ]  <- )  como meio pra fazer a associação entre letra e numero e usar como calculo

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!