怎么知道windows快捷键被哪个程序或则窗口截获了

如何知道windows快捷键被哪个程序或则窗口截获了?

我的foobar不响应"shift+alt+5"快捷键,但是我不知道被哪个程序截获了。经常遇到这样的问题。想写个程序找出这个程序。不知道大家有没有办法?


下面这个似乎只能截获快捷键,但是不知道快捷键被哪些程序截获了。
C/C++ code

1    BOOL installhook()
2    {
3        HINSTANCE hins=AfxGetInstanceHandle();
4        HHOOK Hook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyboardProc,hins,0);
5        return (BOOL)Hook;
6    }
/////////////////////////////////////////////////////////////////////////////////
01    LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
02    {
03        BOOL Discard = FALSE;
04         
05        if (nCode == HC_ACTION)
06        {
07            switch (wParam)
08            {
09            case WM_KEYDOWN:  case WM_SYSKEYDOWN:
10            case WM_KEYUP:    case WM_SYSKEYUP:
11                PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
12                Discard=
13                    //Tab + Alt
14                    ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0))
15                    //Esc + Alt
16                    || ((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0))
17                    //Esc + Ctrl
18                    || ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0))
19                    //Ctrl + Space
20                    || (((GetKeyState(VK_CONTROL) & 0x8000) != 0) && (p->vkCode == VK_SPACE));
21                break;
22            }
23        }
24        return(Discard? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
25    }



------解决方案--------------------
实现很难。曾有过一个叫ghotkeys的开源软件,但是现在找不到了。