如何捕获Ctrl+Space呢?

angelcool 2005-05-04 11:39:02
我用键盘钩子可以捕获Space键的信息为: nCode=0,wParam=32
捕获的Ctrl键的信息为: nCode=0,wParam=17
但是按下组合键Ctrl+Space,信息仍然为:nCode=0,wParam=17
怎样能区分它们呢?


我注册了热键,但是它好像不认。代码如下:
在安装钩子函数时注册热键:RegisterHotKey(m_hWndAS,VK_CTRLSPACE,MOD_CONTROL,VK_SPACE);
在卸载钩子时取消热键: ::UnregisterHotKey(m_hWndAS,VK_CTRLSPACE);
在钩子函数中做判断: if(wparam==VK_CTRLSPACE)
lparam = VK_CTRLSPACE;
但是没用,好像wparam的值仍然为17,即VK_CONTROL。

哪里出问题了??
...全文
402 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelcool 2005-05-13
  • 打赏
  • 举报
回复
UP
angelcool 2005-05-11
  • 打赏
  • 举报
回复
nobady!!
angelcool 2005-05-11
  • 打赏
  • 举报
回复
Up Again
hello1996 2005-05-11
  • 打赏
  • 举报
回复
UP
angelcool 2005-05-09
  • 打赏
  • 举报
回复
两个问题都把我搞晕了,连答复都帖错了。上述Spy++的发现属于下帖:
http://community.csdn.net/Expert/topic/3971/3971243.xml?temp=.7113764
^_^
hello1996 2005-05-09
  • 打赏
  • 举报
回复
study
jerry 2005-05-08
  • 打赏
  • 举报
回复
处理消息一般是这样的,可能是CTRL+SPACE这个组合键已经被系统用来做输入法切换了,所以捕获不到,不知道是不是这样的.
weiziyuner 2005-05-08
  • 打赏
  • 举报
回复
在m_hWndAS窗口中处理WM_HOTKEY即处理用户按热键的消息
angelcool 2005-05-08
  • 打赏
  • 举报
回复
ding
angelcool 2005-05-08
  • 打赏
  • 举报
回复
to weiziyuner(烂人)
m_hWndAS窗口对应的程序不是我编写的。所以我不能处理它的热键消息。

to krh2001(边城浪子)
可能吧。我本想用spy++跟踪一下,可好像也没有类似的信息。

我用Spy++发现:
1、拖动窗口时,发送的消息是
WM_NCLBUTTONDOWN (HTCAPTION)
WM_MOUSEMOVE (MK_LBUTTON)
....
WM_LBUTTONUP
2、点击最小化按钮
WM_NCLBUTTONDOWN (HTMINBUTTON)
WM_MOUSEMOVE (MK_LBUTTON)
....
WM_LBUTTONUP
3、单击菜单
WM_NCLBUTTONDOWN (HTMENU)
WM_MOUSEMOVE (MK_LBUTTON)
....
WM_LBUTTONUP
我想可以通过在得到WM_NCLBUTTONDOWN消息时设定一个全局变量来标识来判断。
还只是思路没有测试成功,有结果了再告诉大家。
KevinWon 2005-05-06
  • 打赏
  • 举报
回复
路过学习
KelvinSpace 2005-05-06
  • 打赏
  • 举报
回复
云~第一版需要设置开发环境才能编译通过,代码都包含了。
第二版就不需设置,直接能编译。
我是把CTRL和SPACE都当作一般按钮处理。
我的程式与你的要求不同,只是提取参考。
[新木马PE源代码 ]
angelcool 2005-05-06
  • 打赏
  • 举报
回复
to krh2001(边城浪子)
因为当Ctrl+Space按下时wparam==17,即VK_CONTROL,所以我才那样做判断。
而且我也按你的提示修改了,但是仍然是无效的,它还是不能判断这个组合键。
jerry 2005-05-06
  • 打赏
  • 举报
回复
if((wparam==VK_SPACE) && (::GetKeyState(VK_CONTROL)&0x8000))

应该这样判断. CONTROL 是组合键,应该在按其它键的时候判断有没有同时按下 CONTROL 另GetKeyState返回的是一组标志组合, 应该判断其中的一个按下标志有没有被置位. \\

详细请参考 MSDN
jerry 2005-05-05
  • 打赏
  • 举报
回复
GetKeyState
angelcool 2005-05-05
  • 打赏
  • 举报
回复
就是用的键盘钩子,发现Ctrl+Space和Ctrl获得的值是一样的,跟Space没关系。

我用键盘钩子可以捕获Space键的信息为: nCode=0,wParam=32
捕获的Ctrl键的信息为: nCode=0,wParam=17
但是按下组合键Ctrl+Space,信息仍然为:nCode=0,wParam=17
oyljerry 2005-05-05
  • 打赏
  • 举报
回复
用键盘钩子呢
angelcool 2005-05-05
  • 打赏
  • 举报
回复
to KelvinSpace(Kelvin)
我看了你的程序pe2.part01.rar中的代码,你是安装了WH_JOURNALRECORD类型的钩子,可以获取键盘和鼠标的输入,但是它只能作为系统钩子,而不能做为线程钩子,不满足我的需要。
我运行你的程序,但是不知道哪里有问题,不能与服务器建立连接,你的程序能单机使用吗?
KelvinSpace 2005-05-05
  • 打赏
  • 举报
回复
错!用HOOK可以载到
看看我的远程控制
控制端
http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=919
angelcool 2005-05-05
  • 打赏
  • 举报
回复
———————???————————
那么我还能怎样才能得到这个热键信息
或者
还有其他判断Ctrl+Space的方法吗?
加载更多回复(9)

16,548

社区成员

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

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

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