小兔求救:关于利用HOOK函数修改消息的问题,请高手一定帮忙

dusj 2000-08-29 12:56:00
我是VC的初学者,问题很多,希望能得到大家的帮助,我也会更加努力。
程序中安装了自定义的属于WH_GETMESSAGE类型的钩子函数,在处理函数中,我想修改某些键盘消息,如将'a'转换为'A',但不能成功转换,还是出现'a', 部分代码如下:
//注:glhHook2为上一个钩子句柄,在共享数据段中
extern "C" DLLEXPORT LRESULT WINAPI GetMsgHookProc
(int nCode, WPARAM wParam, LPARAM lParam)
{
MSG * msg = (MSG *)lParam ;
// HWND hWndTarget = GetActiveWindow() ;
if (nCode<0)
return CallNextHookEx(glhHook2, nCode, wParam,
lParam);
else {
if (msg->message==WM_CHAR) {
if ((char)msg->wParam=='a') {
msg->wParam = (WPARAM)'A' ;
**1 //msg->lParam = (msg->lParam&0xff00ffff)|0x1e0000 ;
**2 //CallNextHookEx(glhHook2, nCode, wParam,lParam);
**3 //SendMessage(hWndTarget, msg->message, msg->wParam,msg-lParam);
**4 //return 1;
}
}
}
return CallNextHookEx(glhHook2, nCode, wParam,lParam);
}
问题:为什么不能达到程序目的?
另外,a. 是否还要第1行以修改键盘的扫描码?
b. 将注释2,3,4行有效,依然不可行,目标窗口不能接受SendMessage发送的消息,为什么?
c. return 1 ;的作用是不是将告诉系统不继续调用以后的钩子函数了?
...全文
335 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dusj 2000-09-02
  • 打赏
  • 举报
回复
详细些好吗?什么是驱动程序里的filter?
ARMDEVICE 2000-08-31
  • 打赏
  • 举报
回复
最好当然是在驱动程序里用filter,
dusj 2000-08-31
  • 打赏
  • 举报
回复
我的问题主要已经解决了,应该响应WM_KEYDOWN消息没错,不需要用SendMessage了,但还不明白:1.如此的HOOK只能拦载WINDOWS标准程序,对DOS的程序如何拦载(不会用驻留内存的方法吧)?2.HOLLY,如何才能得到我想要的窗口?
Holly 2000-08-30
  • 打赏
  • 举报
回复
请注意,你的Hook函数是否是在DLL中,只有通过DLL才可以跨进程实现HOOK的机制!
GetActiveWindow()只能处理当前的线程!
你对MSG的修改是成功的,问题是你的hWndTarget不是你想要的窗口!
dusj 2000-08-30
  • 打赏
  • 举报
回复
我用钩子函数当然是想对所有的窗口都有效(不只是应用程序窗口)。
怎样才能得到当前目标窗口句柄?GetActiveWindow()又有什么用?
又:按理说lParam是MSG的地址,修改了它的数据成员的值应该会影响到后续的消息处理函数的啊。

mytulip 2000-08-29
  • 打赏
  • 举报
回复
??
RedFire 2000-08-29
  • 打赏
  • 举报
回复
呵呵,你想做什么?修改字符这么简单的事可以重载窗口的PreTranslateMessage( )函数。如果想要做钩子的话。清华bbs上的VC++专版的精华区中有一篇文章。如果找不到,可以给我发mail。
Zhou_Kevin@263.net。

你原来的程序问题多多。
a、我不知道。
b、你的目标窗口的句柄取得不对。
c、钩子函数返回true,将告诉系统丢弃该消息。呵呵。
dandycheung 2000-08-29
  • 打赏
  • 举报
回复
拦截WM_CHAR消息不能完成你的要求,要拦截在此之前发生的WM_KEYDOWN消息(经验之谈)。
whongshu 2000-08-29
  • 打赏
  • 举报
回复
???

16,466

社区成员

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

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

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