菜鸟求救:怎么显示错误信息? 把GetLastError的返回值记下来,然后用error lookup工具查错误信息。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 error lookup在什么地方?还有其他的问题? 1.char *_ltoa( long value, char *string, int radix ); 使用ltoa是不是要include stdlib.h? SetWindowsHookEx的最后一个参数不应该是0(你可以传入GetCurrentThreadID()地返回值),0表示你创建的是全局钩子,那你的钩子函数就应该放在DLL中,并把DLL的hInstance传给SetWindowsHookEx的第3个参数 使用ltoa是不是要include stdlib.h对! 第3个参数不能为null,应该传你的dll的句柄(在dllmain中可获得) OK,太好了,我真高兴!你们真好,可是我不知道怎么把分给你们,明天研究一下!还有个问题: 现在我已经得到了键盘敲打的消息,但是我明明按的是d,却出来1013,d的ascii怎么回这么大?而且还出来两个,这是怎么回事?另外我按了好多字符后,再把弹出的消息框一个个关掉,发现居然又不能截获了,怎么回事?还有,我的程序一关掉后(没有UnHookWindowsHookEx),又不能截获了,不是说全局HOOK将自己映射到其他进程的地址空间了吗? 再贴一下:#include "stdafx.h"#include <stdlib.h>HINSTANCE hHinst;BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: hHinst=(HINSTANCE)hModule; } return TRUE;}HHOOK hHook=NULL;LRESULT CALLBACK KeyboardProc( int code, // hook code WPARAM wParam, // virtual-key code LPARAM lParam // keystroke-message information){ char str[4]; itoa((int)wParam,str,4); MessageBox(NULL,str,"hello",0); return 0;//CallNextHookEx(hHook,code,wParam,lParam);}extern "C" __declspec(dllexport) BOOL StartHook(void){ hHook=::SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hHinst,0); if(!hHook) return false; return true;}extern "C" __declspec(dllexport) BOOL EndHook(void){ if(hHook!=NULL) return UnhookWindowsHookEx(hHook); else return false;} itoa()的最后一个参数是进制!你写的4,也就是把10进制转换成4进制,当然很大了。另外,一般在钩子函数中是不调用MessageBox的,这样会很麻烦。每次按下和抬起按键都要调用一次钩子函数,所以是两次你的程序关闭以后,Windows会自动Unhook德,不然系统不久乱了嘛。映射进别的地址空间不是这个意思(你可以看看Win32内存管理的相关文章) vc 语音识别引擎资料,谁有? 在多文档程序的Mainframe的析构函数中删除子框架链表出错 CAsyncSocket断开后如何重新连接 奇怪的问题,使用了双缓冲和设置WS_CLIPCHILDREN属性,当改变主窗口大小时,主界面上的其他控件还是会闪! progress控件问题 如何使复选按钮的背景透明? MFC的小问题 如何取ttf字模? 在一个非UNICODE的VC工程里,如何把一个字符串char*变量,转化成LPCWSTR类型? VC多线程问题?? 我如何从成员类中向程序发消息? 动态调用dll,通过getprocaddress获取函数地址为何不成功?
还有其他的问题?
你们真好,可是我不知道怎么把分给你们,明天研究一下!
还有个问题:
现在我已经得到了键盘敲打的消息,但是我明明按的是d,却出来1013,d的ascii怎么回这么大?而且还出来两个,这是怎么回事?另外我按了好多字符后,再把弹出的消息框一个个关掉,发现居然又不能截获了,怎么回事?还有,我的程序一关掉后(没有UnHookWindowsHookEx),又不能截获了,不是说全局HOOK将自己映射到其他进程的地址空间了吗?
#include "stdafx.h"
#include <stdlib.h>HINSTANCE hHinst;BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hHinst=(HINSTANCE)hModule;
}
return TRUE;
}HHOOK hHook=NULL;LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
char str[4];
itoa((int)wParam,str,4);
MessageBox(NULL,str,"hello",0);
return 0;//CallNextHookEx(hHook,code,wParam,lParam);
}extern "C" __declspec(dllexport) BOOL StartHook(void)
{
hHook=::SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hHinst,0);
if(!hHook) return false;
return true;
}extern "C" __declspec(dllexport) BOOL EndHook(void)
{
if(hHook!=NULL)
return UnhookWindowsHookEx(hHook);
else
return false;
}
每次按下和抬起按键都要调用一次钩子函数,所以是两次
你的程序关闭以后,Windows会自动Unhook德,不然系统不久乱了嘛。映射进别的地址空间不是这个意思(你可以看看Win32内存管理的相关文章)