저는 C로 DLL을 작성하려고합니다.Python에서 KeyboardHookProc을 호출해도 아무런 변화가 없습니다.
설치 후크는 KeyboardProc을 설정합니다. 파이썬에서 InstallHook()
과 UninstallHook()
함수를 호출하면 콜백 함수 KeyboardProc
이 작동하지 않기 때문에 항상 0을 반환합니다.
>>> from ctypes import *
>>> dll = CDLL('C:\...\OurDLL.dll')
>>> dll.InstallHook()
[이 시점에서 입력 뭔가]
>>> result = dll.UninstallHook()
>>> result
0
다음과 같이이가 사용하는
#include "stdafx.h"
#include <windows.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#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;
}
파이썬 코드 :
다음
은 DLL 내 C 코드편집 : 아마도 나는 LowLevelKeyboardHook
도 시도했다고 언급해야합니다. 나는 LowLevel hook이 전역 적이며 모든 키 스트로크를 잡아낼 것이라고 생각하지만, 단지 dll.InstallHook()
파이썬 코드가 제로를 반환하기 전에 잠깐 동안 얼어 붙었다.
저는 C 전문가가 아니므로 도움을 주시면 대단히 감사하겠습니다. 감사.
네가 맞아! DLLMain에서'HMODULE' 타입을 저장해야했습니다. 이제는'KeyboardProc' 콜백 함수에서'keypresses' 값을 증가시키고 있습니다. 공유 세그먼트는 Lowlevel 키보드를 시도 할 때 남겨둔 코드입니다. 내 실수 코드에 대한 사과, 나는 그것을 부끄럽게 여긴다.하지만 실제로 사용하기 전에 해결할 것이다. 다시 한번, 많은 감사합니다! – mmoore