大家好,我目前在学习如何用键盘钩子获取按键输入。因为我在c++方面是个新手,更不用说hook这种比较高级的技术,所以在学习的过程中碰到了很大的困难。下面是我写的一段试验用的最简单的代码,是在vc6.0环境下一个win32程序。
能不能帮我分析下为什么我这个键盘钩子函数不能钩到键盘输入?(我不是全局钩子)#include<iostream>
#include<windows.h>
using namespace std;
static HHOOK hkb=NULL;LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{ cout<<"abc";
if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode))
{
if(wParam=='R') cout<<'bbb';
}
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}BOOL __stdcall installhook()
{
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,0,GetCurrentThreadId());
return TRUE;
}BOOL __stdcall UnHook()
{
BOOL unhooked=UnhookWindowsHookEx(hkb);
return unhooked;
}void main()
{
char a;
installhook();
cin>>a;
/* 省略 */
}
问题就在红色那一步,理论上应该我输入任意按键后屏幕输出abc,但我现在无论输入什么都没反应。请问是为什么,谢谢。
能不能帮我分析下为什么我这个键盘钩子函数不能钩到键盘输入?(我不是全局钩子)#include<iostream>
#include<windows.h>
using namespace std;
static HHOOK hkb=NULL;LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{ cout<<"abc";
if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode))
{
if(wParam=='R') cout<<'bbb';
}
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}BOOL __stdcall installhook()
{
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,0,GetCurrentThreadId());
return TRUE;
}BOOL __stdcall UnHook()
{
BOOL unhooked=UnhookWindowsHookEx(hkb);
return unhooked;
}void main()
{
char a;
installhook();
cin>>a;
/* 省略 */
}
问题就在红色那一步,理论上应该我输入任意按键后屏幕输出abc,但我现在无论输入什么都没反应。请问是为什么,谢谢。
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,0,GetCurrentThreadId());
改成:
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
我现在只是想试验下,弄个最简单的。
要加点什么东西么?
==============
这个应该是版本控制的问题
果然我最担心的事情发生了。