/*
* File name: keyboardhook. c
* Purpose: keyboard hook demo
* Programming environment: WINXP SP2 + Cl 8.0
* Completion date: 2006.3 ver 0.01
* Authors: 88250
* Contact: E-mail: DL88250@gmail.com QQ: 845765
*/
# DEFINE _ win32_winnt 0x0400
# Include <stdio. h>
# Include <stdlib. h>
# Include <windows. h>
# Pragma comment (Lib, "user32.lib ")
DWORD g_tid = 0;
Hhook g_hook = 0;
Bool callback con_handler (DWORD g_tid)
{
Postthreadmessage (g_tid, wm_quit, 0, 0 );
Return true;
}
Lresult callback kb_proc (INT code, wparam W, lparam L)
{
Pkbdllhookstruct P = (pkbdllhookstruct) L;
If (W = wm_keydown) & (getkeystate (vk_capital) & 1) | (getkeystate (vk_shift) & 1 )))
& (P-> vkcode> 64) & (p-> vkcode <91) | (P-> vkcode> 47) & (p-> vkcode <58 )))){
Printf ("You press % C", p-> vkcode );
} Else if (W = wm_keydown) & (P-> vkcode> 64) & (p-> vkcode <91 ))){
Printf ("You press % C", p-> vkcode + 32 );
} Else if (W = wm_keydown) & (P-> vkcode> 47) & (p-> vkcode <58 ))){
Printf ("You press % C", p-> vkcode );
}
Return callnexthookex (g_hook, code, W, L );
}
Int main (void)
{
MSG;
G_tid = getcurrentthreadid ();
Setconsolectrlhandler (& con_handler, true );
G_hook = setwindowshookex (wh_keyboard_ll, & kb_proc, getmodulehandle (null), 0 );
While (getmessage (& MSG, null, 0, 0 )){
Translatemessage (& MSG );
Dispatchmessage (& MSG );
}
Unhookwindowshookex (g_hook );
Return 0;
}