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

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);
}
哇,对不起,根本没办法排版啊,不过程序很简单,大家帮个忙吧,谢谢!
...全文
214 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧