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