Click here to Skip to main content
15,904,153 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
Hi guys... im trying to work on global hook and i tried browsing for some example and i tackled on one of this site that posted this code

 private delegate int LowLevelKeyboardProcDelegate(int nCode, int
wParam, ref KBDLLHOOKSTRUCT lParam);
        [DllImport("user32.dll", EntryPoint = "SetWindowsHookExA",
       CharSet = CharSet.Ansi)]
        private static extern int SetWindowsHookEx(int idHook,
        LowLevelKeyboardProcDelegate lpfn, int hMod, int dwThreadId);
        [DllImport("user32.dll", EntryPoint = "UnHookWindowsHookEx",
       CharSet = CharSet.Ansi)]
        private static extern int UnHookWindowsEx(int hHook);
        [DllImport("user32.dll", EntryPoint = "CallNextHookEx",
       CharSet = CharSet.Ansi)]
        private static extern int CallNextHookEx(int hHook, int nCode, int
        wParam, ref KBDLLHOOKSTRUCT lParam);
        const int WH_KEYBOARD_LL = 13;
        public struct KBDLLHOOKSTRUCT
        {
            public int vkCode;
            int scanCode;
            public int flags;
            int time;
            int dwExtraInfo;
        }
        private int intLLKey;
        private KBDLLHOOKSTRUCT lParam;
        private int LowLevelKeyboardProc(int nCode, int wParam, ref
KBDLLHOOKSTRUCT lParam)
        {
            bool blnEat = false;
            switch (wParam)
            {
                case 256:
                case 257:
                case 260:
                case 261:
                    //Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key
                    if (((lParam.vkCode == 9) && (lParam.flags == 32)) ||
                    ((lParam.vkCode == 27) && (lParam.flags == 32)) || ((lParam.vkCode ==
                    27) && (lParam.flags == 0)) || ((lParam.vkCode == 91) && (lParam.flags
                    == 1)) || ((lParam.vkCode == 92) && (lParam.flags == 1)) || ((true) &&
                    (lParam.flags == 32)))
                    {
                        blnEat = true;
                    }
                    break;
            }
            if (blnEat)
                return 1;
            else return CallNextHookEx(0, nCode, wParam, ref lParam);
        }
        public void KeyboardHook(object sender, EventArgs e)
{
intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, new LowLevelKeyboardProcDelegate(LowLevelKeyboardProc) ,
System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0]).ToInt32(),0);
if(intLLKey == 0){
MessageBox.Show("alt tab was not pressed");
}else{
MessageBox.Show("alt tab waspressed");

}

        }


now i want this code to check or prompt a message box that will say that the key alt+tab was pressed? how do i do this? and where should i placed it? is it during the form load?
i tried placing it in form load but it only prompts once but when i pressed the alt+tab it does not do anything anymore... i placed the it in form load like this


private void Form1_Load(object sender, EventArgs e)
    {
        KeyboardHook(sender, e);
    }


i have no idea how to invoke or call and implement the global hook... please help me with this
Posted
Comments
dan!sh 23-Mar-11 22:03pm    
Looks like you are trying to implement key logger. It looks suspicious to me, at least.
Akinmade Bond 28-Aug-12 14:04pm    
check this link on code-project. http://www.codeproject.com/Articles/442285/Global-Shortcuts-in-WinForm-and-WPF

 
Share this answer
 
Comments
Espen Harlinn 24-Mar-11 3:55am    
Nice links, my 5
Sergey Alexandrovich Kryukov 24-Mar-11 3:59am    
Thank you, Espen.
--SA
Here's another very good hook implementarion. It's in VB, but as you know, it's easy to use VB code in C# apps...

Global Windows Hooks[^]
 
Share this answer
 
In addition to above answer this[^] article also might help you.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900