怎么这么奇怪啊,日志钩子的问题啊

coolxiao 2001-08-17 06:36:57
我写了一个日志钩子,希望记录下键盘的输入,但当我响应WM_KEYDOWN的时候,有些很奇怪的问题。
问题一:我根本没有动键盘,但却不断的有WM_KEYDOWN消息产生,莫名其妙?
问题二:按下一个键却产生两条同样的消息,真是无可奈何。
哪位懂hook的兄弟给分析一下好吗?
下面是我的钩子回调函数。
LRESULT CALLBACK JournalLogProc(int iCode,WPARAM wParam, LPARAM lParam)
{
static HWND hLastFocus=NULL; //记录上一次得到焦点的窗口句柄
const int KeyPressMask=0x80000000; //键盘掩码常量
static char g_PrvChar; //保存上一次按键值

CFile LogFile;
int vKey;
int i;
HWND hFocus; //保存当前活动窗口句柄
char szTitle[256]; //当前窗口名称
char szTime[128]; //保存当前的日期和时间
EVENTMSG *pMsg;
CString stream,buffer;
if (iCode<0)
{
return ::CallNextHookEx(hHook,iCode,wParam,lParam);
}

if (iCode==HC_ACTION)
{
LogFile.Open("logfile.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite,NULL);
pMsg=(EVENTMSG *)lParam;

if (pMsg->message=WM_KEYDOWN)
{
vKey=LOBYTE(pMsg->paramL); //得到虚拟键码

//还应该检查shift capital ctrl键的状态
if (vKey >=48 && vKey<=57) //0..9数字键
{
stream.Format("%c\r\n",vKey);
TRACE("%d\n",vKey);
LogFile.SeekToEnd();
LogFile.Write(stream.GetBuffer(stream.GetLength()),stream.GetLength());

}

if (vKey>=65 && vKey<=90)
{
stream.Format("%c\r\n",vKey);
TRACE("%c\n",vKey);
LogFile.SeekToEnd();
LogFile.Write(stream.GetBuffer(stream.GetLength()),stream.GetLength());

}

}

LogFile.Close();
}

return ::CallNextHookEx(hHook,iCode,wParam,lParam);
}
哇,对不起,根本没办法排版啊,不过程序很简单,大家帮个忙吧,谢谢!
...全文
149 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
coolxiao 2001-08-20
这个方法倒没有用过,能不能说一下什么意思呢?
回复
fish_autumn 2001-08-19
Ctrl+F10
回复
coolxiao 2001-08-18
大家看看啊,简单问题送分啦
回复
coolxiao 2001-08-17
加点分再问一个问题,如何调试钩子啊,好象不能用断点啊
回复
coolxiao 2001-08-17
哦,我的 天,原来是 自己 太大意,不是basic用多了 ,我 没有学过,谢谢帮我找出错误.
回复
dabou 2001-08-17
受教了
回复
golden_alvin 2001-08-17
basic用多了吧
回复
fish_autumn 2001-08-17
天啊,原来是这样。
回复
fish_autumn 2001-08-17
同意楼上 return 0;即可。
问题1说不好。
回复
dcz 2001-08-17
if( pMsg->message=WM_KEYDOWN ) 这种判断语法是不合格的,应该使用 ==
回复
dabou 2001-08-17
return ::CallNextHookEx(hHook,iCode,wParam,lParam);
回复
coolxiao 2001-08-17
帮帮忙啊
回复
coolxiao 2001-08-17
怎么没有人看啊
回复
coolxiao 2001-08-17
push
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-08-17 06:36
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……