Page 1 of 1

Vaciar el buffer del teclado

Posted: Thu Feb 20, 2025 9:13 am
by groiss
Buenos días:
Pongo un ejemplo de lo que pretendo hacer y no consigo.
Estamos en un dialogo modal, en el que hay varios gets y botones, y un setkey(chr("v"), funcion())
Lo que pretendo es que cuando toma el control la "funcion" hace su tarea y al acabar no le queden pulsaciones del teclado por procesar.
He usado la funcion hb_KeyClear() pero no veo que vacie la cola de pulsaciones de windows.
¿Sabeis si existe alguna forma de hacer lo que pretendo?
Muchas gracias
Saludos

Re: Vaciar el buffer del teclado

Posted: Thu Feb 20, 2025 9:36 am
by Antonio Linares
Has probado con SysRefresh() ?

Re: Vaciar el buffer del teclado

Posted: Thu Feb 20, 2025 10:05 am
by groiss
Antonio:
Gracias por la sugerencia, pero si, me mantiene la cola del teclado
Gracias.
Un saludo

Re: Vaciar el buffer del teclado

Posted: Thu Feb 20, 2025 10:23 am
by Antonio Linares
Desde C se haría asi:

Code: Select all | Expand

#include <windows.h>

void VaciarMensajesTeclado() {
    MSG msg;
    // Itera sobre los mensajes de teclado que están en la cola y los remueve.
    while (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)) {
        // Puedes procesarlos si es necesario, o simplemente descartarlos.
    }
}

Re: Vaciar el buffer del teclado

Posted: Thu Feb 20, 2025 10:25 am
by Antonio Linares
Para probarlo desde Harbour:

Code: Select all | Expand

#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>

void VaciarMensajesTeclado( void ) {
    MSG msg;
    // Itera sobre los mensajes de teclado que están en la cola y los remueve.
    while (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)) {
        // Puedes procesarlos si es necesario, o simplemente descartarlos.
    }
}

HB_FUNC( VACIATECLADO )
{
   VaciarMensajesTeclado();
}

#pragma ENDDUMP   

Re: Vaciar el buffer del teclado

Posted: Thu Feb 20, 2025 11:13 am
by groiss
Perfecto.
Ha funcionado perfecto.
Muchisimas gracias.
Un saludo