Click here to Skip to main content
Click here to Skip to main content

KeyBoard Hooks

By , 23 Jul 2001
 

Introduction

Hooks are one of the most powerful features of Windows. We can hooks to trp all the events in the Windows environment. This example shows how to trap keyboard events and save the keys to a text file.

In the Microsoft® Windows™ operating system, a hook is a mechanism by which a function can intercept events (messages, mouse actions, keystrokes) before they reach an application. The function can act on events and, in some cases, modify or discard them. Functions that receive events are called filter functions and are classified according to the type of event they intercept. For example, a filter function might want to receive all keyboard or mouse events. For Windows to call a filter function, the filter function must be installed — that is, attached to a Windows hook (for example, to a keyboard hook). Attaching one or more filter functions to a hook is known as setting a hook. If a hook has more than one filter function attached, Windows maintains a chain of filter functions. The most recently installed function is at the beginning of the chain, and the least recently installed function is at the end.

When a hook has one or more filter functions attached and an event occurs that triggers the hook, Windows calls the first filter function in the filter function chain. This action is known as calling the hook. For example, if a filter function is attached to the Computer Based Training (CBT) hook and an event that triggers the hook occurs (for example, a window is about to be created), Windows calls the CBT hook by calling the first function in the filter function chain.

To maintain and access filter functions, applications use the SetWindowsHookEx and the UnhookWindowsHookEx functions.

An Example

The CALLBACK function in my example is given below..

LRESULT __declspec(dllexport)__stdcall  CALLBACK KeyboardProc(int nCode,WPARAM wParam, 
                            LPARAM lParam)
{
    char ch;            
    if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode))
    {        
        if ((wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f ) &&(wParam<=0x100)) 
        {
            f1=fopen("c:\\report.txt","a+");
            if (wParam==VK_RETURN)
            {
                ch='\n';
                fwrite(&ch,1,1,f1);
            }
            else
            {
                   BYTE ks[256];
                GetKeyboardState(ks);

                WORD w;
                UINT scan=0;
                ToAscii(wParam,scan,ks,&w,0);
                ch = char(w); 
                fwrite(&ch,1,1,f1);
            }
        fclose(f1);
        }
    }

    LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
    return  RetVal;
}

The installhook function that is installing the hook function in my example is given below.

BOOL __declspec(dllexport)__stdcall installhook()
{
    f1=fopen("c:\\report.txt","w");
    fclose(f1);
    hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);

    return TRUE;
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

H. Joseph
United States United States
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionHow to set Key combination (like SHIFT+F9 etc.) as hookmemberMember 783682923 Aug '11 - 19:57 
QuestionExample in Assembly LanguagememberMember 810561222 Jul '11 - 9:38 
GeneralThanks very muchmemberachui198031 Mar '11 - 16:45 
GeneralHook not working fine if Keyboard Language is Changemembereg_Anubhava1 Feb '11 - 1:30 
Generalapplication crash when click on iexplore 7membercjsc20 Mar '10 - 10:08 
AnswerRe: application crash when click on iexplore 7memberBMaguire24 May '11 - 8:02 
GeneralWhich hook is good for trapping Windows Key + some other Key as shortcutmemberArif Saiyed27 Jan '10 - 2:29 
QuestionDiscard EventmemberErin McCarty9 Jun '09 - 15:51 
QuestionMessageBox within Hook-Functionmembernoxmortis12 Aug '08 - 1:17 
GeneralPlease help memembersomnuc8 Aug '08 - 17:05 
QuestionUnhandled Exception?memberAdrian Parker15 Feb '08 - 7:56 
AnswerRe: Unhandled Exception?memberAdrian Parker15 Feb '08 - 8:11 
Questiontyping assistance (hook)membernguyenkim25 Oct '07 - 17:09 
Questionare the dll global variables local to each process?memberfoxx 133725 Jul '07 - 7:59 
AnswerRe: are the dll global variables local to each process?memberSunny127023 Feb '11 - 6:35 
QuestionKeyboard Hook working partlymemberJayapal Chandran17 Jun '07 - 1:39 
GeneralRe: Keyboard Hook working partlymemberfoxx 133725 Jul '07 - 8:02 
GeneralThe low level approachmemberEl_Khlifi_Abdellatif5 May '07 - 12:28 
QuestionProblem after lock Workstation need Helpmemberskywalker327 Mar '07 - 22:34 
GeneralWindow movement restrictionmemberAKG20 Feb '07 - 22:00 
GeneralRe: Window movement restrictionmemberbitslayer14 Mar '07 - 10:05 
Generalhelpmembermailtochandra2000@yahoo.com20 Feb '07 - 18:54 
Generalhelp memembermailtochandra2000@yahoo.com14 Feb '07 - 23:04 
GeneralRe: help mememberDarkWeaver545517 Feb '07 - 6:42 
GeneralKey board hook in dialog based applicationmembermailtochandra2000@yahoo.com14 Feb '07 - 17:31 
GeneralExcellentmemberjrivero19 Jan '07 - 9:59 
GeneralSimple, but not go be ignored.memberbrahmma9 Jan '07 - 20:02 
QuestionLicense?membermaxinuruguay4 Dec '06 - 14:01 
GeneralKeyboard Referencemembertuantrang17 Nov '06 - 16:45 
GeneralTranfer Keyboard event to another applicationmemberkhoipm7 Nov '06 - 15:55 
GeneralRe: Tranfer Keyboard event to another applicationmemberYoung E9 Nov '06 - 15:47 
GeneralRe: Tranfer Keyboard event to another applicationmemberthietlalung31 Dec '06 - 18:16 
GeneralRe: Tranfer Keyboard event to another applicationmemberAKG17 Jan '07 - 2:37 
GeneralRe: Tranfer Keyboard event to another applicationmemberzhi-chen16 Mar '07 - 18:40 
GeneralRe: Tranfer Keyboard event to another applicationmemberAKG25 Mar '07 - 23:18 
GeneralRe: Tranfer Keyboard event to another applicationmemberpratikmota4 Aug '10 - 2:52 
QuestionHow to hook keyboard events from other processes ?memberudiraz10 Oct '06 - 22:20 
AnswerRe: How to hook keyboard events from other processes ?memberMagnavexx2 Aug '07 - 15:14 
GeneralWindows hook on VistamemberVivekanand H18 Jul '06 - 0:23 
GeneralRe: Windows hook on Vistamemberskaha_software7 Nov '06 - 11:17 
GeneralRe: Windows hook on VistamemberJohn McNamara30 Mar '07 - 5:08 
GeneralRe: Windows hook on Vistamembermywish1 Apr '10 - 21:34 
AnswerRe: Windows hook on VistamemberAndrianG19 Nov '07 - 11:15 
QuestionUnHookmemberJoe John17 Jul '06 - 18:19 
AnswerRe: UnHookmemberchick8017 Aug '06 - 18:43 
GeneralCase Sensitivity and other problemsmemberGrey|Pixels5 Jul '06 - 2:28 
GeneralChanging directory of report.txtmemberVolarz31 May '06 - 14:35 
Generaldoesn't work in terminal sessionmemberbenm9999999924 May '06 - 16:31 
Generalblocking VK_ENTER using keyboard_hookmemberori kovacsi15 Apr '06 - 21:14 
QuestionHide DialogmemberJ51219822 Mar '06 - 18:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 24 Jul 2001
Article Copyright 2001 by H. Joseph
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid