大家来帮我看一下这段全局钩子代码 搞不明白你这个键盘钩子是什么作用?是不是当你KEYIN时,引发钩子,钩子再SENDMESSAGE,然后BEEP?你把WM_KEYDOWN改为WM_CLOSE,看看,你KEYIN时会不会引发窗口关闭。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WH_KEYBOARD 当有键盘动作时即会引发钩子 楼上说的极有道理,我自己实验了一下://hook.h//空//hook.cpp#include "Hook.h"#include "windows.h"HWND hHookWnd;HHOOK MyHook;int CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam){if(PostMessage(hHookWnd,WM_CLOSE,wParam,lParam))//用SendMessage总是返回FALSE{MessageBeep(-1);return CallNextHookEx(MyHook,code,wParam,lParam);}elsereturn FALSE;}extern "C" __declspec(dllexport) BOOL __stdcall HookBegin(HWND hWnd){hHookWnd=hWnd;MyHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)&KeyboardProc,GetModuleHandle("Hook.dll"),NULL);if(MyHook && hHookWnd){MessageBox(0,"启用成功!","",NULL);return TRUE;}elseMessageBox(0,"启用失败!","",NULL);return FALSE;}extern "C" __declspec(dllexport) BOOL __stdcall HookEnd(void){if(UnhookWindowsHookEx(MyHook)){MessageBox(0,"禁用成功!","",NULL);return TRUE;}elseMessageBox(0,"禁用失败!","",NULL);return FALSE;}//HOOK。DEFLIBRARY "HOOK.DLL"DESCRIPTION ''EXPORTSHookBegin @1HookEnd @2建一DIALOG工程,加一BUTTON,ONBUTTON中代码如下: typedef BOOL (CALLBACK *LOADHOOK)(HWND hwnd);typedef BOOL (CALLBACK *UNLOADHOOK)();HINSTANCE hDLL;LOADHOOK loadhook;UNLOADHOOK unloadhook;hDLL=::LoadLibrary((LPCTSTR)"hook");if (hDLL!=NULL) {loadhook=(LOADHOOK)::GetProcAddress(hDLL,"HookBegin"); unloadhook=(UNLOADHOOK)::GetProcAddress(hDLL,"HookEnd"); if(loadhook==NULL||unloadhook==NULL) {::MessageBox(0,"对不起,由于系统出错,本功能不能使用!!!","Somthing Wrong",MB_OK); return; } loadhook(this->m_hWnd); return ; }::MessageBox(0,"对不起,由于系统出错,本功能不能使用!!!","Somthing Wrong",MB_OK);其中我将PostMessage(hHookWnd,WM_KEYDOWN,wParam,lParam))//用SendMessage总是返回FALSE改为PostMessage(hHookWnd,WM_CLOSE,wParam,lParam))//用SendMessage总是返回FALSE 你要注意:1、你有没有模块定义文件。DEF?或[在CPP中声明导出]2、调用时有关语句。欢迎讨论:E_Mail&MSN:[email protected] 改为: ::SetForegroundWindow(hHookWnd); ::keybd_event() // 参数设计见MSDN. ■■■超级■■■ !!!有关List 的push_back的问题。 摄像头进行视频传输的问题 我只想要msdn library的那个帮助文档 关于获取另一个类的数据 初学者关于对话框的问题 如何调试程序? 看是否有内存泄漏? 占用多少系统资源? 帮我看一下,怎么会这样! MFC按键没响应 关于点击窗体外响应的消息? 关于日期是否合法的问题 在win98下,如何修改全局环境变量?如:path . 在VC程序中发送邮件
//hook.h
//空
//hook.cpp
#include "Hook.h"
#include "windows.h"
HWND hHookWnd;
HHOOK MyHook;int CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if(PostMessage(hHookWnd,WM_CLOSE,wParam,lParam))//用SendMessage总是返回FALSE
{
MessageBeep(-1);
return CallNextHookEx(MyHook,code,wParam,lParam);
}
else
return FALSE;
}
extern "C" __declspec(dllexport) BOOL __stdcall HookBegin(HWND hWnd)
{
hHookWnd=hWnd;
MyHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)&KeyboardProc,GetModuleHandle("Hook.dll"),NULL);
if(MyHook && hHookWnd)
{
MessageBox(0,"启用成功!","",NULL);
return TRUE;
}
else
MessageBox(0,"启用失败!","",NULL);
return FALSE;
}
extern "C" __declspec(dllexport) BOOL __stdcall HookEnd(void)
{
if(UnhookWindowsHookEx(MyHook))
{
MessageBox(0,"禁用成功!","",NULL);
return TRUE;
}
else
MessageBox(0,"禁用失败!","",NULL);
return FALSE;
}//HOOK。DEF
LIBRARY "HOOK.DLL"
DESCRIPTION ''
EXPORTS
HookBegin @1HookEnd @2
建一DIALOG工程,加一BUTTON,ONBUTTON中代码如下:
typedef BOOL (CALLBACK *LOADHOOK)(HWND hwnd);
typedef BOOL (CALLBACK *UNLOADHOOK)();
HINSTANCE hDLL;
LOADHOOK loadhook;
UNLOADHOOK unloadhook;
hDLL=::LoadLibrary((LPCTSTR)"hook");
if (hDLL!=NULL)
{loadhook=(LOADHOOK)::GetProcAddress(hDLL,"HookBegin");
unloadhook=(UNLOADHOOK)::GetProcAddress(hDLL,"HookEnd"); if(loadhook==NULL||unloadhook==NULL)
{::MessageBox(0,"对不起,由于系统出错,本功能不能使用!!!","Somthing Wrong",MB_OK);
return;
}
loadhook(this->m_hWnd);
return ;
}
::MessageBox(0,"对不起,由于系统出错,本功能不能使用!!!","Somthing Wrong",MB_OK);
其中我将
PostMessage(hHookWnd,WM_KEYDOWN,wParam,lParam))//用SendMessage总是返回FALSE
改为
PostMessage(hHookWnd,WM_CLOSE,wParam,lParam))//用SendMessage总是返回FALSE
1、你有没有模块定义文件。DEF?或[在CPP中声明导出]
2、调用时有关语句。
欢迎讨论:
E_Mail&MSN:[email protected]
::SetForegroundWindow(hHookWnd);
::keybd_event() // 参数设计见MSDN.