📄 subject_35712.htm
字号:
<p>
序号:35712 发表者:六@六 发表日期:2003-04-08 22:32:17
<br>主题:求助!(关于钩子问题)
<br>内容:各位大虾,能否教小弟如何在一对话框程序中利用钩子函数截取键盘空格键的消息,并将其改为TAB键的消息发出。(即用空格键实现TAB键的功能,必须利用局部钩子函数)。谢谢!<BR>email:dms_625@21cn.com
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:neilgan 回复日期:2003-04-09 00:17:25
<br>内容:In fact, you don't have to use a hook. You can use PreTranslateMessage and get WM_KEYDOWN/WM_KEYUP/WM_CHAR message, then translate them.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:六@六 回复日期:2003-04-09 07:25:44
<br>内容:谢谢大虾指点,不过要求必须利用钩子函数。我编的程序也能截获键盘消息,就是不知道如何将空格键的消息转变为TAB的消息在发出?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:neilgan 回复日期:2003-04-09 08:23:54
<br>内容:What kind of hook do you use? you should use WH_GETMESSAGE. In this type of Hook, you can monitor and modify the message you get. You should search for WM_KEYDOWN,WM_KEYUP and do your modification.<BR><BR>Please read Msdn(SetWindowsHooEx,GetMsgProc,MSG,WM_KEYUP,WM_KEYDOWN) for more information<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:neilgan 回复日期:2003-04-09 08:26:59
<br>内容:wParam for WM_KEYUP/DOWN:<BR>This is the vitual-key code.<BR><BR>Space is 'VK_SPACE'<BR>TAB is 'VK_TAB'<BR>Please read winuser.h for other virtual key code.<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:六@六 回复日期:2003-04-09 09:54:51
<br>内容:谢谢大虾指点:不过我还是不太明白。<BR>我的钩子(局部)函数如下:<BR>LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)<BR>{<BR> if (nCode < 0) //若code<0,直接调用CallNextHookEx返回 <BR> return CallNextHookEx(Keyboardhook, nCode, wParam, lParam);<BR> if(wParam==VK_TAB) <BR> return 1; <BR> if(wParam==VK_SPACE)//能检测到为空格键。<BR> { <BR> CDialog::NextDlgCtrl();//?此处不正确。<BR> //不知如何实现转变为TAB发出(焦点移到下一控件?<BR> }<BR> <BR> return CallNextHookEx(Keyboardhook, nCode, wParam,lParam);<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:neilgan 回复日期:2003-04-09 12:07:20
<br>内容:I told you, you should use WH_GETMESSAGE hook type<BR><BR>LRESULT CALLBACK GetMsgHook(....)<BR>{<BR>if (nCode<0)...<BR>MSG *psMsg=(MSG*)lParam;<BR>if ((WM_KEYDOWN==psMsg->message) || (WM_KEYUP==psMsg->message))<BR>{<BR>if (VK_SPACE == psMsg->wParam)<BR> psMsg->wParam = VK_TAB;<BR>}<BR>....<BR>}<BR><BR>Hook is a very powerful and interesting tool, but you need to be careful using it.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:六@六 回复日期:2003-04-09 14:32:50
<br>内容:非常感谢你对我的帮助,不过我按你的方法做了一遍,程序出了一点错误。但我怎么也查不出错在何处。不知你能否帮小弟看一边源程序。先谢了!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:neilgan 回复日期:2003-04-09 21:43:50
<br>内容:Why don't you hear me? I told you twice that you should use WH_GETMESSAGE as the hook type in the call of SetWindowsHookEx. Only for this kind of hook, you can change the message.<BR><BR>And, you said you need a local hook, so you should use GetCurrentThread() as the last argument in SetWindowsHookEx.<BR><BR>Why don't you just read the Msdn? Just search the section of SetWindowsHookEx and GetMsgHook, you'll find much more information than I told you.<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:六@六 回复日期:2003-04-10 10:39:36
<br>内容:非常感谢。我都不知道该如何表达我的感激之情,这个小程序我都搞了快一个星期了,苦不得解,多亏你的一番指点。不知能否和你交个朋友,能经常和你请教些编程的问题,我的QQ:24422925,Email:dms_625@21cn.com。无论如何我都应该好好谢谢你。Thank you very much!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:你看 回复日期:2003-04-12 12:25:49
<br>内容:恭喜恭喜,偶也受益匪浅:)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -