Я создал 2 class.class KeyLogger
и class cHookProc
сначала я создаю cHookProc
в KeyLogger
классе.
тогда я получаю адрес LRESULT CALLBACK cHookProc::HookProc
по unsigned int cHookProc::getCallBackAddr()
это логично и всегда хорошо работает?
это KeyLogger.h
#pragma once
#include <time.h>
#include <windows.h>
class cHookProc{
public:
LRESULT CALLBACK HookProc(int code, WPARAM wp, LPARAM lp);
unsigned int getCallBackAddr();
private:
};
class KeyLogger{
public:
KeyLogger();
~KeyLogger();
private:
cHookProc *cHkProc;
};
а это KeyLogger.cpp
#include "KeyLogger.h"
KeyLogger::KeyLogger(){
cHkProc = new cHookProc;
int i = cHkProc->getCallBackAddr();
HOOKPROC hprc = (HOOKPROC)i;
HHOOK keyHook = SetWindowsHookEx(WH_KEYBOARD_LL, hprc, NULL, NULL);
}
KeyLogger::~KeyLogger(){
delete cHkProc;
}
LRESULT CALLBACK cHookProc::HookProc(int code, WPARAM wp, LPARAM lp){
if (code == 0){
.
.
.
}
return CallNextHookEx(NULL, code, wp, lp);
}
unsigned int cHookProc::getCallBackAddr(){
LRESULT(__stdcall cHookProc::*ptrtofn)(int, WPARAM, LPARAM) = &cHookProc::HookProc;
unsigned int *i;
i = (unsigned int*)&ptrtofn;
return *i;
}