C/Visual C - ¿Como detectar que teclas se han pulsado?

 
Vista:

¿Como detectar que teclas se han pulsado?

Publicado por joselito (1 intervención) el 05/07/2001 08:26:52
Hola a todos.
Mi pregunta es la siguiente:
¿Me podéis pasar una rutina (completa si es posible, con declaración de variables y todo) que detecte la pulsación de las teclas, y qué teclas he pulsado desde el sistema y no de la aplicacion?...
Estoy haciendo una .dll residente en memoria, y necesito saber qué teclas se pulsan cuando estoy en Windows, por ejemplo... ¿Es posible?...
Muchas gracias. Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Detectar pulsación de teclas del sistema en una DLL residente en memoria

Publicado por Alejandro (913 intervenciones) el 30/09/2024 22:41:01
Joselito, aquí tienes un ejemplo de rutina en C/Visual C que te permitirá detectar la pulsación de teclas del sistema en una DLL residente en memoria:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <windows.h>
 
// Declaración de variables globales
HHOOK g_hKeyboardHook;
 
// Función de callback para el procedimiento del gancho de teclado
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        KBDLLHOOKSTRUCT* pKeyboardStruct = (KBDLLHOOKSTRUCT*)lParam;
 
        // Verificar si se ha pulsado una tecla
        if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
        {
            // Obtener el código de la tecla pulsada
            DWORD dwKeyCode = pKeyboardStruct->vkCode;
 
            // Realizar las acciones necesarias con el código de la tecla
            // ...
        }
    }
 
    // Pasar el control al siguiente gancho en la cadena
    return CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam);
}
 
// Función para instalar el gancho de teclado
BOOL InstallKeyboardHook()
{
    // Obtener el identificador del módulo de la DLL
    HMODULE hModule = GetModuleHandle(NULL);
 
    // Instalar el gancho de teclado
    g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, hModule, 0);
 
    return (g_hKeyboardHook != NULL);
}
 
// Función para desinstalar el gancho de teclado
BOOL UninstallKeyboardHook()
{
    // Desinstalar el gancho de teclado
    BOOL bResult = UnhookWindowsHookEx(g_hKeyboardHook);
 
    g_hKeyboardHook = NULL;
 
    return bResult;
}
 
// Función principal de la DLL
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
            // Instalar el gancho de teclado al cargar la DLL
            InstallKeyboardHook();
            break;
 
        case DLL_PROCESS_DETACH:
            // Desinstalar el gancho de teclado al descargar la DLL
            UninstallKeyboardHook();
            break;
    }
 
    return TRUE;
}

En este ejemplo, la función `KeyboardProc` es el procedimiento de gancho de teclado que se llama cada vez que se pulsa una tecla. Dentro de esta función, puedes realizar las acciones necesarias con el código de la tecla pulsada.

La función `InstallKeyboardHook` se utiliza para instalar el gancho de teclado, mientras que la función `UninstallKeyboardHook` se utiliza para desinstalarlo. Estas funciones se llaman en la función `DllMain` al cargar y descargar la DLL, respectivamente.

Recuerda que este es solo un ejemplo básico de cómo detectar la pulsación de teclas del sistema en una DLL residente en memoria. Es posible que necesites realizar ajustes adicionales según tus necesidades específicas. Además, ten en cuenta que el uso de ganchos de teclado puede tener implicaciones de seguridad y privacidad, por lo que debes asegurarte de utilizarlo de manera responsable y cumpliendo con las regulaciones aplicables.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar