我设法让输入钩子工作,但是现在我把它们放进库中有点丢失了。
我在IDE中定义了一个带有INPUTHOOK_EXPORTS
的简单标题,因此dll导出(Visual Studio)。
#pragma once
#ifdef INPUTHOOK_EXPORTS
#define INPUTHOOK_API __declspec(dllexport)
#else
#define INPUTHOOK_API __declspec(dllimport)
#endif
INPUTHOOK_API void InstallInputHook();
INPUTHOOK_API void RemoveInputHook();
当然:
问题是,当我尝试编译这个库时,我得到两个未解析的外部,分别用于SetWindowsHookEx
和UnhookWindowsHookEx
。为什么这两个功能不可用,而其他 并没有任何问题?据我所知,我确实有包含权。
谢谢
答案 0 :(得分:0)
从MSDN主题LowLevelKeyboardProc:
在安装它的线程的上下文中调用此钩子。通过向安装了挂钩的线程发送消息来进行调用。因此,安装钩子的线程必须有一个消息循环。
答案 1 :(得分:0)
SetWindowsHookEx
是一个宏,应该变成SetWindowsHookExA' for ascii or
SetWindowsHookExW for wchar. Similary for
UnhookWindowsHookEx`。
报告的错误应该特定于缺少哪个函数 - A或W - 这似乎表明宏没有到位。
你似乎在cpp中缺少winuser.h,但是这个或等价的可能在预编译的stdafx.h头文件中。
您需要在构建(链接)库时包含user32.lib(通常在默认包含的库中)。