我一直在尝试用C写一个动态链接库
安装钩子设置键盘程序。从Python调用InstallHook()和UninstallHook()函数总是返回0,我猜这是因为我的回调函数
以下是DLL的C代码:#include "stdafx.h"
#include
#include
#include
#include
#include "ourdll.h"
//#pragma comment(linker, "/SECTION:.SHARED,RWS")
//#pragma data_seg(".SHARED")
HHOOK hKeyboardHook = 0;
int keypresses = 0;
HMODULE hInstance = 0;
//#pragma data_seg()
BOOL WINAPI DllMain (HANDLE hModule, DWORD dwFunction, LPVOID lpNot)
{
hInstance = hModule; //Edit
return TRUE;
}
LRESULT CALLBACK KeyboardProc(int hookCode, WPARAM vKeyCode, LPARAM flags)
{
if(hookCode < 0)
{
return CallNextHookEx(hKeyboardHook, hookCode, vKeyCode, flags);
}
keypresses++;;
return CallNextHookEx(hKeyboardHook, hookCode, vKeyCode, flags);
}
__declspec(dllexport) void InstallHook(void)
{
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstance, 0);
}
__declspec(dllexport) int UninstallHook(void)
{
UnhookWindowsHookEx(hKeyboardHook);
hKeyboardHook = 0;
return keypresses;
}
要使用它的Python代码如下:
^{pr2}$
[在此处键入内容]>>> result = dll.UninstallHook()
>>> result
0
编辑:我应该提到我也尝试过LowLevelKeyboardHook。我知道lowlevelhook是全局的,它将捕捉所有的击键,但这只是导致我的dll.InstallHook()Python代码在返回零之前冻结了一两秒钟。在
我不是C语言方面的专家,如有任何帮助我将不胜感激。谢谢。在