C++在使用HOOK的时候遇到了一些小问题。
SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardProc,GetModuleHandle(_T("WillSetHook")), 0 );
设置没问题 都成功了。
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
//KeyboardHookStruct KHS = new KeyboardHookStruct();
//KHS = (KeyboardHookStruct)lParam;
if (WM_KEYDOWN == wParam /&& (KHS.flags & 128)/64 == 0*/)
{
keybd_event(66,0,0,0);
keybd_event(66,0,KEYEVENTF_KEYUP,0);
return 1;
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
这个是我的钩子函数,也能正确调用,没问题。问题就出在这个LPARAM这个参数上。因为我用的是WH_KEYBOARD_LL钩子,所以LPARAM这个参数是一个KeyboardHookStruct类型的结构体(或者是类),但是这个结构体要怎么定义呢?,或者需要包含什么头文件呢?
我自己尝试定义了这个结构体(类):
// public class KeyboardHookStruct
// {
// public int vkCode;
// public int scanCode;
// public int flags;
// public int time;
// public int dwExtraInfo;
// };
// struct class KeyboardHookStruct
// {
// int vkCode;
// int scanCode;
// int flags;
// int time;
// int dwExtraInfo;
// };
类型和网上给出的类型是一样的,但是却无法编译过,可能是我基础不太扎实。
求助大神教我改怎么去定义这个结构体,在哪里定义(我自定义的类内还是类外?),具体的定义方法,我的钩子函数里 该怎么去写,才能将LPARAM里面的值拿出来用。
(被注释掉的代码因编译错误而被注释掉了)