#include <windows.h>
#include "csdn_test1.h" //把接口和实现分开写便于调试和包含头文件#pragma data_seg("Share")
HHOOK HookHwnd=NULL;
HINSTANCE HinstDll=NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:Share,RWS")//LRESULT WINAPI KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
~~~~~~这儿应该定义成回调函数CALLBACK。
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam);BOOL WINAPI DllMain(HANDLE hInst,ULONG reason,LPVOID lpReserved)
{
HinstDll=(HINSTANCE)hInst;//保存本DLL的实例句柄
if(HinstDll!=NULL) //setwindowshookex时该实例句柄不可为空
return(TRUE);
return(FALSE);
}
DLLEXPORT bool StartHook(void)
{ if(HookHwnd==NULL)
{
HookHwnd=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,HinstDll,0L);
if(HookHwnd!=NULL)
MessageBox(NULL,"In StartHook : Ok","hi",MB_OK); //调试
return (HookHwnd!=NULL);
}
return(FALSE);
}LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if(code==HC_ACTION)
{
// switch(wParam)
//case 0x97: //这样写是不对的,屏蔽掉之后按键便可弹出消息框。
MessageBox(NULL,"U PRESS A","Message",MB_OK);return 1;
}
return CallNextHookEx(HookHwnd,code,wParam,lParam);
} 你的程序主要问题在 keyboardproc应该是回调函数、Dll实例句柄不应该为空
还有接口和实现应该分开。
你可能想通过按下‘A’ 实现弹出消息框,我不知道这个wParam中是否是字符
ASCII码。感觉可能是错的。
解决方案 »
- 请教,关于regex的不解之惑
- 如何获取键盘按键力度,或者说速度?
- 数据库中的数据与EDIT控件中的数据比较
- 想学VC,不知道有什么好的入门级书没,学过点C/C++
- 求教~设置页面控件caption属性的函数
- ListCtrl控件SubItemText最大长度仅256吗? Edit控件中删除字符不能用Del键,只能用退格键?
- 如何用不同的颜色显示文本?
- 急!!!请各位大虾指点,送分100.
- 如何让程序一执行就在后台运行?请指点!
- mdi窗口中,当一子窗口关闭时如何给出一给出一个提示(AfxMessageBox("dffdf")?
- app wizard第六步选 view 的base class时,在下拉框中有没有CHtmalView这个base class?我的vc6.0中没有,但是一本书的例程叫我选,我该怎么办
- 急死人的问题,各位快救命。
DLLEXPORT bool StartHook(void);