#include <windows.h>#pragmaComment (lib, "User32.lib")Hhook G_hkeyboard=NULL;#pragmaData_seg ("Mysec")#pragmaData_seg ()#pragmaComment (linker, "/SECTION:MYSEC,RWS")Hhook G_hook;//here is the hook procedure function, the same as the hook procedure function in scheme one, no longer repeats, where the function name is changed to KeyboardhookprocLRESULT WINAPI Keyboardhookproc (intNcode,wparam Wparam,lparam LPARAM) {lpkbdllhookstruct PKB=(lpkbdllhookstruct) LParam; BOOL Bkeytoshield=FALSE; if(NCode = =hc_action) { Switch(wParam) { CaseWm_keydown: CaseWm_syskeydown: CaseWm_keyup: Casewm_syskeyup:{Bkeytoshield= (Pkb->vkcode = = Vk_lwin) | | (Pkb->vkcode = = Vk_rwin) | |/*win key*/(PKB->vkcode = = Vk_escape) | | (Pkb->vkcode = = Vk_return) | |/*ESC key*/((PKB->vkcode = = Vk_tab) && ((Pkb->flags & llkhf_altdown)! =0))||/*ALT + TAB*/((PKB->vkcode = = Vk_escape) && ((Pkb->flags & llkhf_altdown)! =0))||/*Alt+esc*/((PKB->vkcode = = Vk_escape) && ((Getkeystate (Vk_control) &0x8000) !=0));/*Ctrl+tab*/ Break; } default: Break; } } return(Bkeytoshield?)True:callnexthookex (G_hook,ncode,wparam,lparam));}voidSethook ()//Mounting Hooks{G_hkeyboard= SetWindowsHookEx (Wh_keyboard_ll, Keyboardhookproc, GetModuleHandle (L"Keyboardhook"),0); }voidUnhook ()//Uninstalling Hooks{UnhookWindowsHookEx (g_hkeyboard);}/******************************************dll end******************************************/
C + + keyboard hooks