搞不明白你这个键盘钩子是什么作用?
是不是当你KEYIN时,引发钩子,钩子再SENDMESSAGE,然后BEEP?你把WM_KEYDOWN改为WM_CLOSE,看看,你KEYIN时会不会引发窗口关闭。
是不是当你KEYIN时,引发钩子,钩子再SENDMESSAGE,然后BEEP?你把WM_KEYDOWN改为WM_CLOSE,看看,你KEYIN时会不会引发窗口关闭。
解决方案 »
- 关于字符串处理函数,高人进
- 求救:在dll中使用ADO操作数据库时DLL退出时出错!
- 如何解决使用CJLib中汉字显示不了的问题?
- 如何编程实现弹出MO驱动器的盘片?
- 几个数据库记录,增加,读取的怪问题,请教!!
- 关于CFORMVIEW。如何实现点击菜单,打开不同的FORMVIEW,要打开的FORMVIEW已经建立好的。
- 求助,扩展DLL中的全局变量,导入主程序,是否为主程序的全局变量?
- 为什么很多资料在介绍VC中的数据库编程时,大多用access的数据库作为例子,很少有VFP的,用在ACCESS上的程序代码同样实用与VFP上吗?他们
- vector<CString*> 抱内存错误
- 为什么在对话框程序的PreTranslateMessage里面显示一个模态对话框会出错?关注!!!
- 在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.