导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

如何捕获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。

哪里出问题了??
...全文
310 点赞 收藏 29
写回复
29 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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的方法吗?
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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