Red de conocimiento informático - Espacio del host - ¡Intenta escribir un programa de enlace de teclado global en lenguaje C y obtendrás 100 puntos si lo logras!

¡Intenta escribir un programa de enlace de teclado global en lenguaje C y obtendrás 100 puntos si lo logras!

El enlace de teclado global debe implementarse en una dll

Supongo que todavía no sabes qué es una dll

Pero hay buenas noticias para ti

La captura global del teclado se puede lograr a través de LogHook en el programa:

Código VC:

#include

HHOOK LogHook=NULL;

LALLADA DE RESULTADO LogProc(código int,WPARAM wParam,LPARAM lParam)

{

EVENTMSG *pEventMsg=( EVENTMSG*)lParam;

if(code==HC_ACTION)

{

switch(pEventMsg->mensaje)

{

caso (WM_KEYDOWN) :

BYTE bKeyState[256];

uAscii corto sin firmar[4];

UINT uScanCode;

int iRet;

p>

GetKeyboardState(bKeyState);

bKeyState[VK_SHIFT]=GetKeyState(VK_SHIFT);

uScanCode=(pEventMsg->paramH>>16) ;

iRet=ToAscii(pEventMsg-> paramL,uScanCode,bKeyState,uAscii,0);

switch(iRet)

{

caso 0:

break;

caso 1:

if((char)uAscii[0]== 't' || (char) uAscii[0]= ='T')//se ha presionado la tecla

{

MessageBox(NULL, "Se ha presionado T", "Solicitud de tecla",MB_OK) ;

/************** Realice la reproducción de música usted mismo********** ****/

}

si no ((char)uAscii[0]=='y' || (char)uAscii[0]=='Y')//Se ha presionado la tecla Y

{

MessageBox(NULL, "Y presionado", "Alerta de pulsación de tecla",MB_OK);

/*************** *** Implementado aquí Función para detener la reproducción de música******************/

}

break;

Predeterminado:

descanso;

}

Predeterminado:

descanso;

}

}

return CallNextHookEx(LogHook,code,wParam,lParam);

}

int WINAPI WinMain( HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow

)

<

p>{

LogHook=SetWindowsHookEx(WH _JOURNALRECORD,LogProc,hInstance,NULL);

while(1)Sleep(100);

devuelve 0;

}

LogHook se está ejecutando de forma inestable.