Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使我的钩子保持在钩链的顶部_C++_Windows_Hook - Fatal编程技术网

C++ 如何使我的钩子保持在钩链的顶部

C++ 如何使我的钩子保持在钩链的顶部,c++,windows,hook,C++,Windows,Hook,我正在做一个学校项目,我正在写一份申请书。我正在windows中注册一个全局钩子,我想对到达应用程序的事件执行更改 因此,目前我安装了一个全局钩子,但不知何故,事件可能首先到达应用程序(基于我看到的synthoms),然后才到达我的钩子 我很好奇,我该如何把我的钩子保持在钩链的顶端?另外,特定于应用程序的钩子在全局钩子之前首先被调用 编辑,添加代码(这就是它目前的样子,这显然没有试图重新注册钩子以保持它在顶部。我有另一个版本,它在一个睡眠的while循环中重新注册它,但这不起作用。): intm

我正在做一个学校项目,我正在写一份申请书。我正在windows中注册一个全局钩子,我想对到达应用程序的事件执行更改

因此,目前我安装了一个全局钩子,但不知何故,事件可能首先到达应用程序(基于我看到的synthoms),然后才到达我的钩子

我很好奇,我该如何把我的钩子保持在钩链的顶端?另外,特定于应用程序的钩子在全局钩子之前首先被调用

编辑,添加代码(这就是它目前的样子,这显然没有试图重新注册钩子以保持它在顶部。我有另一个版本,它在一个睡眠的while循环中重新注册它,但这不起作用。):

intmain()
{
HHOOK hhkLowLevelKybd;
尝试
{
hhkLowLevelKybd=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyBoardProc,0,0);
味精;
而(!GetMessage(&msg,NULL,NULL,NULL))
{
翻译信息(&msg);
发送消息(&msg);
}

你能不能把显示如何安装钩子的代码包含进来?你不能保证钩子位于链的顶端。因为如果两个程序都要求位于链的顶端会怎么样?有趣的是,我已经尝试过每隔50毫秒左右重新安装钩子。我想应用程序还有其他方法可以知道尽管如此,我还是很好奇:全局钩子的优先级是如何划分的?它们是在应用程序定义的钩子之前被调用的,还是放在同一个队列中,最后安装的那个被调用的?
int main()
{


HHOOK hhkLowLevelKybd;

    try
    {
        hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyBoardProc, 0, 0);

        MSG msg;
        while (!GetMessage(&msg, NULL, NULL, NULL))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        cout << "Hook installed" << endl;
    }
    catch (...)
    {
        cout << "Exception occured. Stopping, uninstalling hook." << endl;
    }

    UnhookWindowsHookEx(hhkLowLevelKybd);

    return(0);
}