Click here to Skip to main content
11,576,692 members (60,436 online)
Click here to Skip to main content

KeyBoard Hooks

, 23 Jul 2001 588K 14.8K 153
Rate this:
Please Sign up or sign in to vote.
This example shows how to write global hooks .This program captures all the Keyboard events and save the keys to a text file.
<!-- Download Links --> <!-- Main HTML starts here -->

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

Share

About the Author

H. Joseph
United States United States
No Biography provided

You may also be interested in...

Comments and Discussions

 
Questionwhat is the first condition for? Pin
Jayapal Chandran3-Aug-13 5:18
memberJayapal Chandran3-Aug-13 5:18 
AnswerRe: what is the first condition for? Pin
Rajesh R Subramanian23-Oct-14 19:55
professionalRajesh R Subramanian23-Oct-14 19:55 
QuestionHow to set Key combination (like SHIFT+F9 etc.) as hook Pin
Member 783682923-Aug-11 19:57
memberMember 783682923-Aug-11 19:57 
QuestionExample in Assembly Language Pin
Member 810561222-Jul-11 9:38
memberMember 810561222-Jul-11 9:38 
GeneralThanks very much Pin
achui198031-Mar-11 16:45
memberachui198031-Mar-11 16:45 
GeneralHook not working fine if Keyboard Language is Change Pin
eg_Anubhava1-Feb-11 1:30
membereg_Anubhava1-Feb-11 1:30 
Generalapplication crash when click on iexplore 7 Pin
cjsc20-Mar-10 10:08
membercjsc20-Mar-10 10:08 
AnswerRe: application crash when click on iexplore 7 Pin
BMaguire24-May-11 8:02
memberBMaguire24-May-11 8:02 
GeneralWhich hook is good for trapping Windows Key + some other Key as shortcut Pin
Arif Saiyed27-Jan-10 2:29
memberArif Saiyed27-Jan-10 2:29 
QuestionDiscard Event Pin
Erin McCarty9-Jun-09 15:51
memberErin McCarty9-Jun-09 15:51 
QuestionUnhandled Exception? Pin
Adrian Parker15-Feb-08 7:56
memberAdrian Parker15-Feb-08 7:56 
AnswerRe: Unhandled Exception? Pin
Adrian Parker15-Feb-08 8:11
memberAdrian Parker15-Feb-08 8:11 
Questiontyping assistance (hook) Pin
nguyenkim25-Oct-07 17:09
membernguyenkim25-Oct-07 17:09 
Questionare the dll global variables local to each process? Pin
foxx 133725-Jul-07 7:59
memberfoxx 133725-Jul-07 7:59 
AnswerRe: are the dll global variables local to each process? Pin
Sunny127023-Feb-11 6:35
memberSunny127023-Feb-11 6:35 
QuestionKeyboard Hook working partly Pin
Jayapal Chandran17-Jun-07 1:39
memberJayapal Chandran17-Jun-07 1:39 
GeneralRe: Keyboard Hook working partly Pin
foxx 133725-Jul-07 8:02
memberfoxx 133725-Jul-07 8:02 
GeneralThe low level approach Pin
El_Khlifi_Abdellatif5-May-07 12:28
memberEl_Khlifi_Abdellatif5-May-07 12:28 
QuestionProblem after lock Workstation need Help Pin
skywalker327-Mar-07 22:34
memberskywalker327-Mar-07 22:34 
GeneralWindow movement restriction Pin
AKG20-Feb-07 22:00
memberAKG20-Feb-07 22:00 
GeneralRe: Window movement restriction Pin
bitslayer14-Mar-07 10:05
memberbitslayer14-Mar-07 10:05 
Generalhelp Pin
mailtochandra2000@yahoo.com20-Feb-07 18:54
membermailtochandra2000@yahoo.com20-Feb-07 18:54 
Generalhelp me Pin
mailtochandra2000@yahoo.com14-Feb-07 23:04
membermailtochandra2000@yahoo.com14-Feb-07 23:04 
GeneralRe: help me Pin
DarkWeaver545517-Feb-07 6:42
memberDarkWeaver545517-Feb-07 6:42 
GeneralKey board hook in dialog based application Pin
mailtochandra2000@yahoo.com14-Feb-07 17:31
membermailtochandra2000@yahoo.com14-Feb-07 17:31 
GeneralExcellent Pin
jrivero19-Jan-07 9:59
memberjrivero19-Jan-07 9:59 
GeneralSimple, but not go be ignored. Pin
brahmma9-Jan-07 20:02
memberbrahmma9-Jan-07 20:02 
QuestionLicense? Pin
maxinuruguay4-Dec-06 14:01
membermaxinuruguay4-Dec-06 14:01 
GeneralKeyboard Reference Pin
tuantrang17-Nov-06 16:45
membertuantrang17-Nov-06 16:45 
GeneralTranfer Keyboard event to another application Pin
khoipm7-Nov-06 15:55
memberkhoipm7-Nov-06 15:55 
GeneralRe: Tranfer Keyboard event to another application Pin
Young E9-Nov-06 15:47
memberYoung E9-Nov-06 15:47 
GeneralRe: Tranfer Keyboard event to another application Pin
thietlalung31-Dec-06 18:16
memberthietlalung31-Dec-06 18:16 
GeneralRe: Tranfer Keyboard event to another application Pin
AKG17-Jan-07 2:37
memberAKG17-Jan-07 2:37 
GeneralRe: Tranfer Keyboard event to another application Pin
zhi-chen16-Mar-07 18:40
memberzhi-chen16-Mar-07 18:40 
GeneralRe: Tranfer Keyboard event to another application Pin
AKG25-Mar-07 23:18
memberAKG25-Mar-07 23:18 
GeneralRe: Tranfer Keyboard event to another application Pin
pratikmota4-Aug-10 2:52
memberpratikmota4-Aug-10 2:52 
QuestionHow to hook keyboard events from other processes ? Pin
udiraz10-Oct-06 22:20
memberudiraz10-Oct-06 22:20 
AnswerRe: How to hook keyboard events from other processes ? Pin
Magnavexx2-Aug-07 15:14
memberMagnavexx2-Aug-07 15:14 
GeneralWindows hook on Vista Pin
Vivekanand H18-Jul-06 0:23
memberVivekanand H18-Jul-06 0:23 
GeneralRe: Windows hook on Vista Pin
skaha_software7-Nov-06 11:17
memberskaha_software7-Nov-06 11:17 
GeneralRe: Windows hook on Vista Pin
John McNamara30-Mar-07 5:08
memberJohn McNamara30-Mar-07 5:08 
GeneralRe: Windows hook on Vista Pin
mywish1-Apr-10 21:34
membermywish1-Apr-10 21:34 
AnswerRe: Windows hook on Vista Pin
AndrianG19-Nov-07 11:15
memberAndrianG19-Nov-07 11:15 
QuestionUnHook Pin
Joe John17-Jul-06 18:19
memberJoe John17-Jul-06 18:19 
AnswerRe: UnHook Pin
chick8017-Aug-06 18:43
memberchick8017-Aug-06 18:43 
GeneralCase Sensitivity and other problems Pin
Grey|Pixels5-Jul-06 2:28
memberGrey|Pixels5-Jul-06 2:28 
GeneralChanging directory of report.txt Pin
Volarz31-May-06 14:35
memberVolarz31-May-06 14:35 
Generaldoesn't work in terminal session Pin
benm9999999924-May-06 16:31
memberbenm9999999924-May-06 16:31 
Generalblocking VK_ENTER using keyboard_hook Pin
ori kovacsi15-Apr-06 21:14
memberori kovacsi15-Apr-06 21:14 
QuestionHide Dialog Pin
J51219822-Mar-06 18:43
memberJ51219822-Mar-06 18:43 

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

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

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