在DLL中调用LowLevelKeyboardProcedure

时间:2010-08-18 08:18:56

标签: c++ hook

我设法让输入钩子工作,但是现在我把它们放进库中有点丢失了。

我在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();

当然:

The cpp file

问题是,当我尝试编译这个库时,我得到两个未解析的外部,分别用于SetWindowsHookExUnhookWindowsHookEx。为什么这两个功能不可用,而其他 并没有任何问题?据我所知,我确实有包含权。

谢谢

2 个答案:

答案 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(通常在默认包含的库中)。