CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  Windows SDK/API

如何实现系统级热键?

楼主slow_man(slow_man)2002-11-06 08:37:37 在 C++ Builder / Windows SDK/API 提问

采用RegisterHotkey和截获WM_HOTKEY可以实现进程级热键,若我想实现类似windows文件查询(win   +   F)这种对整个系统都有效的热键,该如何实现,请高手指导!Thanks 问题点数:100、回复次数:6Top

1 楼Iamme(不死鸟)回复于 2002-11-06 09:00:05 得分 10

键盘钩子Top

2 楼slow_man(slow_man)回复于 2002-11-06 09:04:27 得分 0

鄙人对钩子简直一窍不通,请高手从理论到实现上给予知道!多谢了Top

3 楼szbug(深圳虫)回复于 2002-11-06 09:27:53 得分 10

理论上简单的说就是无论键盘按什么都通过你的钩子函数,那么你想怎么弄都随你拉。。。Top

4 楼jishiping(JSP 季世平)回复于 2002-11-06 10:08:15 得分 40

不明白你的意思?使用RegisterHotkey和截获WM_HOTKEY后,那么无论哪个程  
  序在最上面(激活),程序都可以响应用户按下的热键的。就说win+F,执行  
  的还是Windows自己的查找功能啊,不可能执行别的程序的功能吧。同样的道  
  理,你在你的程序中用RegisterHotkey定义了一个热键(就已经是系统热键  
  了),那么无论你的程序处于何种状态,程序都能收到这个热键的事件。  
  我想唯一的难点,是如何让你的程序的窗口跑到最上面吧。可以使用下面的  
  代码,让窗口句柄为Handle的窗口跑到最上面:  
  SetWindowPos(Handle,   HWND_TOPMOST,   0,   0,   0,   0,   SWP_NOMOVE|SWP_NOSIZE);  
  SetWindowPos(Handle,   HWND_NOTOPMOST,   0,   0,   0,   0,   SWP_NOMOVE|SWP_NOSIZE);  
  SetForegroundWindow(Handle);Top

5 楼slow_man(slow_man)回复于 2002-11-06 11:01:33 得分 0

楼上的兄弟:  
        其实是这样的,我做的系统共有5个EXE,他们之间通过FileMapping和消息来通信(他们的句柄都保存在了FileMapping中),但是我现在有个通用查询,在5个EXE中都有效,所以不论哪一个进程的窗口在最上面时(而且就算都不在最上面),都希望能够通过一个快捷键来实现通用查询。  
        顺便问一下:如果我在A进程注册了HotKey,在B进程能对该热键进行处理吗?Top

6 楼jishiping(JSP 季世平)回复于 2002-11-06 13:56:00 得分 40

"如果在A进程注册了HotKey,在B进程能对该热键进行处理吗?"  
  不可以的。你的5个EXE,你需要知道他们的先后次序。这很简单,拦截事件OnActivate,将FileMapping中保存的句柄重新排序就可以了。在任意一个  
  EXE中使用RegisterHotkey注册了热键后,从FileMapping中保存的句柄得到  
  最后一次激活的那个EXE的句柄,然后向这个窗口发送消息,让这个EXE执行  
  指定的代码。这样就实现你的功能了。注意,如果已经注册热键的EXE退出  
  后(在执行UnregisterHotKey之后),需要从剩下的EXE中挑选任意一个EXE  
  (给窗口发送消息),让这个EXE再次注册热键(就是始终有一个程序保持  
  热键被注册)。  
   
  Top

相关问题

  • 有关定义系统级热键的问题!!!UP者有分
  • 如何实现“双击鼠标右键”的系统热键定义?
  • 怎样在程序里向系统注册多个系统级热键?
  • 系统热键疑问
  • 系统热键及其他
  • 系统热键问题
  • ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆|  简直是散分:怎样建立以下类型的热键:窗体级、进程级、系统级
  • 请问怎样注册一个系统级的热键,如:Ctrl+Shift+Y,就能运行我的软件。
  • 请教:如何屏蔽系统热键 ?!
  • 如何用Delphi注册系统热键??

关键词

  • 系统
  • 注册
  • 执行
  • 查询
  • 消息
  • 热键
  • 句柄
  • filemapping
  • 程序
  • 进程

得分解答快速导航

  • 帖主:slow_man
  • Iamme
  • szbug
  • jishiping
  • jishiping

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo