小兔求救:关于利用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 ;的作用是不是将告诉系统不继续调用以后的钩子函数了?