elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  salir de un bucle presionando la tecla ESC
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: salir de un bucle presionando la tecla ESC  (Leído 4,571 veces)
kakshi

Desconectado Desconectado

Mensajes: 2


Ver Perfil
salir de un bucle presionando la tecla ESC
« en: 4 Agosto 2019, 08:48 am »

ayuda necesito salir de un bucle presionando la tecla ESC

aqui dejo mi código , no logro salir del bucle .

#include<iostream>
#include<windows.h>
#include<stdlib.h>
#define ESC 27


using namespace std;
void cargando();
int tecla;

int main()
{

while(tecla!=ESC)

{

cout<<"\nCARGANDO "; cargando();


}

    system("pause");
    return 0;
}

void cargando()
{


        for(int i=0;i<10;i++)
        {
        cout<<"*";
        Sleep(100);
        if(i==9)system("cls");

        }


}


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: salir de un bucle presionando la tecla ESC
« Respuesta #1 en: 4 Agosto 2019, 11:16 am »

Puedes usar la funcion kbhit() o _kbhit() para revisar el buffer en busca de la tecla. También tienes getasynckeystate()
Para algo sencillo te sirve, pero si en el futuro quieres un keylogger en C++ o algo así multiplataforma te va a ir horrible.

Hay burradas de maneras distintas de hacerlo. Las que mejor funcionan pasan por usar bibliotecas bastante grandes dependiendo de para que vayas a usar el software unas o otras. Por ejemplo los eventos de SDL2 son una marabilla pero tienes que tener la ventana al frente, por lo que para keyloggers chungo. En Qt también hay eventos de teclas, ni idea de si sirve para keylogger. Hay chorrocientas bibliotecas con sus implementaciones. También hay keyloggers codigo abierto en github para que veas que librerías suelen usar y para que plataformas.

Para windows tienes windows.h y hay varias formas de hacerlo.

Si te da todo igual y quieres algo que te funcione y ya, la manera más cutre y sencilla de hacerlo que de me ocurre:
Código
  1. #include <windows.h>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. bool mantenerseEnBucle = true;
  8.  
  9.   while(mantenerseEnBucle)
  10.   {
  11.  
  12.    if(GetAsyncKeyState(VK_ESCAPE))
  13.      {
  14.       mantenerseEnBucle = false;
  15.       cin.ignore();
  16.       }
  17.    }
  18.  
  19. return 0;
  20. }
Puedes meterle un sleep entre cada iteración del bucle para reducir la carga en el procesador pero igual no te registra la tecla si coincide con el sleep. Por eso se suele usar _kbhit() y comprobar el buffer, pero también tiene sus problemas de no registrar teclas. Mi primer keylogger lo hice con _kbhit() y era una patata, no pillaba ni el 60% de las pulsaciones por mucho que lo ajustaba.
Entre otras formas puedes consultar la documentación oficial de microsoft con winapi para buscar una manera funcional y práctica de hacerlo. O lo que te comenté de revisar keyloggers código abierto y probar alguno que te funcione guay para mirar la documentación de las funciones y librerías que usan. Los código de botnets y rotkits suelen tener también módulos de keyloggers totalmente funcionales.

El std no recoge forma std de hacerlo.  

Tu código no hace nada porque no tienes nada que revise el buffer, o capture teclas, solo el virtual code de la tecla, pero no lo comparas con nada.

Pd: stdlib.h te sobra, no la estás usando. Y si en otros códigos no vas a usar window.h para nada extra que no sea system, tienes la alternativa de cin.get(); que viene incluida en iostream.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int main()
  5. {
  6. cout << "Ejemplo" << endl << "xD" << endl;
  7. cin.get();
  8. return 0;
  9. }


« Última modificación: 4 Agosto 2019, 11:32 am por string Manolo » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

kakshi

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: salir de un bucle presionando la tecla ESC
« Respuesta #2 en: 4 Agosto 2019, 21:49 pm »

Gracias string Manolo ,si funciono la función  kbhit()
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Salir de bucle cuando el caracter es un espacio [Resuelta]
Programación C/C++
diegoCmC 8 8,214 Último mensaje 7 Junio 2011, 16:27 pm
por diegoCmC
[QT C++] Como salir del bucle??
Programación C/C++
x7uk 3 4,277 Último mensaje 28 Noviembre 2012, 17:21 pm
por febef
No consigo salir de un bucle While
Programación C/C++
mario290386 4 4,646 Último mensaje 5 Agosto 2018, 20:35 pm
por mario290386
¿Parar un bucle for pulsando una tecla? « 1 2 »
Programación C/C++
jmhr98 12 8,711 Último mensaje 23 Agosto 2018, 00:26 am
por enriquemesa8080
AL SALIR OPRIMIENDO UNA TECLA IMPRIME TAMBIÉN LO ÚLTIMO INGRESADO
Programación C/C++
snoopty 2 3,642 Último mensaje 15 Septiembre 2021, 18:12 pm
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines